iOS定义长字符串的实用宏

今天在看WebViewJavascriptBridge源码的时候发现一个神奇的宏,在定义较长字符串时很实用。
举个例子,将一段js代码存到一个变量,为了便于阅读需要加入换行,需要在每行结束加上\

1
2
3
4
5
6
NSString *str = @"function() { \
if (window.WebViewJavascriptBridge) { \
return; \
} \
})(); \
";

这时,可以用宏来优化。

1
2
3
4
5
6
7
#define LONG_STRING_DEFINE(x) #x
NSString *str = @LONG_STRING_DEFINE(function() {
if (window.WebViewJavascriptBridge) {
return;
}
})();
);

宏展开后代码如下

1
NSString *str = @";(function() { if (window.WebViewJavascriptBridge) { return; })();";

用Xcode看宏展开

打开Assistant Editor,选择Preproces,就可以看到展开的宏。

15396963641371