【发布时间】:2015-09-07 11:11:29
【问题描述】:
我刚刚在我正在编辑的一些遗留代码中遇到了这一行:
[UIImage imageNamed:@"data/visuals/interface/" @"backgroundViewController"];
^^^^
"Oops, what have I done here?"
我想我一定是不小心把一些东西粘贴到了错误的地方,但是 undo 并没有改变那行。出于好奇,我建立了这个程序,它成功了!
你知道吗? Obj-c 有一种更简洁的连接字符串文字的方式。
我添加了更多测试:
一个简单的日志
NSLog(@"data/visuals/interface/" @"backgroundViewController");
数据/视觉/界面/backgroundViewController
在参数中
NSURL *url = [NSURL URLWithString:@"http://" @"test.com" @"/path"];
NSLog(@"URL:%@", url);
网址:http://test.com/path
使用变量
NSString *s = @"string1";
NSString *s2 = @"string2";
NSLog(@"%@", s s2);
无法编译(对此并不感到惊讶)
其他字面量
NSNumber *number = @1 @2;
不编译
一些问题
- 此字符串连接是否记录在任何地方?
- 支持多久了?
- 什么是底层实现?我希望它会是
[s1 stringByAppendingString:s2] - 任何权威机构都将其视为良好做法吗?
【问题讨论】:
-
请注意,您需要
%@为您尝试打印或连接的每个NSString所以NSLog(@"%@ %@", s, s2); -
@PabloA。你似乎有点错过了重点。这只是测试字符串 variables(与 literals 相对)是否可以以相同的方式连接。结果,预计不会编译。
-
哦,抱歉,没有尝试给出解决方案,只是看到
NSLog(@"%@", s s2);,我想添加该注释以防万一。 -
writing @"abc" @"def" 只是将常量加起来......所以它甚至可能不是像 stringByAppendingString 这样的任何方法调用......更多的是一个简单的编译器决定做出一个@ “abcdef”出来了……比想象中的“魔法”要少……
-
至少 2014 年 1 月(来自我得到的旧经验测试)。但我不使用它。只是告诉你,这至少比那更老。
标签: ios objective-c string cocoa-touch concatenation