繁体   English   中英

基本的Objective-C语法:“%@”?

[英]Basic Objective-C syntax: “%@”?

我正在研究斯坦福iPhone播客,并且有一些基本问题。

第一个:为什么没有简单的字符串连接? (或者我只是想念它?)

我需要以下NSLog的帮助,并且不知道它目前在做什么(%@部分)。 您是否只是将它们替换为需要连接的位置,然后最后用逗号分隔值?

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

NSLog(@"My home folder is at '%@'", absolutePath);

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

NSLog(@"My home folder is at " + absolutePath);

谢谢! (此外,对于熟悉Java / C#/ etc样式语法过渡到Objective-C的人来说,有什么好的指南/参考?)

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

当您执行以下操作时:

NSLog(@"My home folder is at '%@'", absolutePath);

您正在告诉NSLog用名为absolutePath的字符串替换%@占位符。

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

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

将打印:

我的#5家在/ home /任何地方

一种简单的字符串串联方法:

NSString *s1 = @"Hello, ";
NSString *s2 = @"world.";
NSString *s = [NSString stringWithFormat:@"%@%@", s1, s2];
// s will be "Hello, world."

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

希望能帮助到你。

那是一个字符串格式说明符 基本上,它允许您在字符串中指定占位符以及要插入到占位符位置的值。 我上面引用的链接列出了占位符的不同符号以及每个占位符的特定格式。

就像C#的String.Format方法一样:

NSLog(String.Format("My home folder is at '{0}'", absolutePath));

您可以使用NSString + stringWithFormat进行串联:

NSString* a = // ...
NSString* b = // ...
NSString* a_concatenated_with_b = [NSString stringWithFormat:@"%@%@",a,b];

“%@”的原因是字符串格式基于printf格式字符串语法并扩展了该格式 这些函数采用可变数量的参数,任何以百分号(%)开头的内容均被解释为占位符。 后续字符确定占位符的类型。 标准printf不使用“%@”,并且由于“ @”是Objective-C添加到C语言中的常用符号,因此“ @”将表示“ Objective-C对象”是有意义的。 。

没有使用加号(+)的自动合并,这是因为NSString *是指针类型,而Objective-C是C的严格超集,因此,向NSString *对象添加对象可以进行指针操作。 与C ++语言一样,Objective-C没有任何运算符重载功能。

另外, %@用途相当广泛,因为它实际上将参数的description方法的结果插入结果字符串中。 对于NSString,这是字符串的值,其他类可以提供有用的替代。 例如,类似于Java中的toString。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM