我刚刚在编辑的一些遗留代码中看到了这一行:
[UIImage imageNamed:@"data/visuals/interface/" @"backgroundViewController"];
^^^^
"Oops, what have I done here?"
我认为我必须偶然地将某些东西粘贴在错误的位置,但撤消并未改变该行。出于好奇,我建立了程序,它成功了!
Whaddyaknow? Obj-c有一种更简洁的串联字符串文字的方式。
我添加了一些测试:
简单日志
NSLog(@"data/visuals/interface/" @"backgroundViewController");
数据/视觉/接口/ backgroundViewController
参数
NSURL *url = [NSURL URLWithString:@"http://" @"test.com" @"/path"];
NSLog(@"URL:%@", url);
的URL:http://test.com/path
使用变量
NSString *s = @"string1";
NSString *s2 = @"string2";
NSLog(@"%@", s s2);
不编译(对此不感到惊讶)
其他文字
NSNumber *number = @1 @2;
不编译
一些问题
[s1 stringByAppendingString:s2]
答案 0 :(得分:4)
这种连接静态NSStrings
的方法是一种编译时编译器功能,已有十多年的历史。它通常用于允许长的常量字符串分成几行。几十年来,“C”中也提供了类似的功能。
在 C编程语言一书中,1988年第二版,第38页描述了字符串连接,因此它已经存在了很长时间。
摘自本书:
字符串常量可以在编译时连接:
"hello," " world" is equivalent to "hello, world"
这对于跨多个源代码行吐出长字符串非常有用。
Objective-C是“C”的严格超集,因此它始终支持“C”字符串连接,我的猜测是因为静态NSString
连接一直可用。
当用于将静态字符串分成若干行以便于阅读时,这被认为是一种很好的做法。