为什么我可以将字符串定义为@“this is”@“one string”?

时间:2012-10-05 21:56:43

标签: objective-c

这似乎是一个非常有效的计划:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    NSString* hey = @"hey"
    @"there";
    NSLog(@"%@",hey);

    [pool drain];
    return 0;
}

在llvm gcc和apple llvm中进行编译时没有显示警告或错误。为什么?似乎应该对此进行警告,因为我只能将其视为混乱。特别是在这样的情况下:

NSArray* a = [NSArray arrayWithObjects:@"one",
              @"two,
              @"three
              @"four",
              nil];

你期待四个参赛作品......但不是!整蛊,对吧?是因为您可能希望将字符串定义分成多行?

2 个答案:

答案 0 :(得分:2)

这是Objective-C中多行字符串的语法。

我无法明确回答语言设计师为何如此设计它,但我们可以假设他们希望Objective-C字符串的语法类似于C字符串的语法。

也就是说,在C中,您可以对多行​​字符串执行以下操作:

char *my_string = "Line 1 "
                  "Line 2";

在Objective-C中,您可以对多行​​字符串执行以下操作:

NSString *my_string = @"Line1 "
                      @"Line2"; // The @ on this line is optional.

(代码摘录改编自https://stackoverflow.com/a/797351/25295

答案 1 :(得分:1)

  

是否因为您可能希望将字符串定义拆分为多行?

是。当您想要分割非常长的字符串以获得更好的代码读取时,即在NSLocalizedString密钥描述中,它非常有用。