基本Objective-C语法:"%@"?

cks*_*ubs 5 c syntax objective-c

我正在浏览斯坦福iPhone播客并提出一些基本问题.

第一个:为什么没有简单的字符串连接?(或者我只是错过了吗?)

我需要帮助下面的NSLog,并且不知道它目前正在做什么(%@部分).您是否只需要在需要连接的地方替换那些,然后用逗号分隔最后的值?

NSString *path = @"~";
NSString *absolutePath = [path stringByExpandingTildeInPath];

NSLog(@"My home folder is at '%@'", absolutePath);
Run Code Online (Sandbox Code Playgroud)

而使用任何其他编程语言我都这样做:

NSLog(@"My home folder is at " + absolutePath);
Run Code Online (Sandbox Code Playgroud)

谢谢!(另外,熟悉Java/C#/ etc样式语法过渡到Objective-C的人有什么好的指南/参考资料吗?)

Pab*_*ruz 13

%@ 是NSString实例的格式字符串中的占位符.

当你做类似的事情时:

NSLog(@"My home folder is at '%@'", absolutePath);
Run Code Online (Sandbox Code Playgroud)

您告诉NSLog %@使用名为absolutePath的字符串替换占位符.

同样,如果您放置更多占位符,则可以指定更多值来替换这些占位符,如下所示:

NSString *absolutePath = @"/home/whatever";
NSLog(@"My home #%d folder is at '%@'", 5, absolutePath);
Run Code Online (Sandbox Code Playgroud)

将打印:

我的家#5在/ home /无论如何

一种简单的字符串连接方法:

NSString *s1 = @"Hello, ";
NSString *s2 = @"world.";
NSString *s = [NSString stringWithFormat:@"%@%@", s1, s2];
// s will be "Hello, world."
Run Code Online (Sandbox Code Playgroud)

您不能将+符号作为字符串连接运算符,因为Objective-C中没有运算符重载.

希望能帮助到你.

  • 字符串格式说明符可以打印除Objective-C对象之外的其他类型,例如整数(`%i`),双精度(`%f`),C字符串(`%s`)等等.您无法使用连接运算符执行此操作.字符串格式说明符来自C,用于输出等函数`printf()`.`%@`语法是对现有C字符串格式说明符的Objective-C的补充,它打印Objective-C对象的`-description`方法的输出. (2认同)