我刚刚在编辑的一些旧代码中遇到了这一行:
[UIImage imageNamed:@"data/visuals/interface/" @"backgroundViewController"]; ^^^^ "Oops,what have I done here?"
我以为我必须意外地将错误的地方粘贴在一起,但是撤消并没有改变这一点.出于好奇,我建立了这个程序,并且成功了!
Whaddyaknow? Obj-c有一个更简洁的连接字符串文字的方法.
我增加了一些测试:
一个简单的日志
NSLog(@"data/visuals/interface/" @"backgroundViewController");
data/visuals/interface/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);
Doesn’t compile (not surprised by this one)
其他文字
NSNumber *number = @1 @2;
Doesn’t compile
一些问题
这个字符串连接是否记录在任何地方?
>支持多久了?
>什么是底层实现?我希望这将是[s1 stringByAppendingString:s2]
>是否被任何权威机构认为是良好做法?
解决方法
这种连接静态NSStrings的方法是一个编译时间编译器,已经有十多年了.它通常用于允许长的常量字符串被分割成几行.几十年来,“C”中已经有类似的功能.
在C编程语言书中,1988第二版,第38页描述了字符串连接,所以它已经存在了很长时间.
本书摘录:
String constants can be concatenated at compile time:
"hello," " world" is equivalent to "hello,world"
This is useful for spitting long strings across several source lines.
Objective-C是“C”的严格超集,所以一直支持“C”字符串连接,我的猜测是因为静态的NSString连接一直是可用的.
当用于将静态字符串分割成多行以便可读性时,这被认为是很好的做法.