这是在Swift:
let someString:String = "blah"
在Objective-C中有效地等同于此:
NSString * const someString = @"blah";
我一直认为在Objective-C中以这种方式使用 const 关键字已经使它有效地等同于引入Swift,但它会很好听到这证实了。在Objective-C中定义局部变量时,很少有人以这种方式使用const,但它似乎等同于let。考虑到let的好处,确保指针不会发生突变,我想知道我现有的Objective-C项目是否会因为一直使用这个约定而无益。我的问题不是关于Swift String和NSString之间的区别。
答案 0 :(得分:6)
已提供,您可以在类型之后放置const
,如下所示:
NSString * const someString = @"blah"; // your example
struct { int x; int y; } const someStruct = { 42, 24 }; // const value type
然后,(Objective-)C中的const
和Swift中的let
的语义相似。对于值类型,都会阻止修改值。对于引用类型,它们都阻止修改引用本身并允许修改引用的对象。
如果将const
放在声明中的其他位置,则输入指向常量的C指针,常量指针,常量的常量指针和(非)常量组合的更长链的迷宫。不是每个进入这个迷宫的人都会回来......或者至少不是他们的理智完好无损。你被警告了! ; - )
答案 1 :(得分:2)
您可以在Objective-C中定义let和var。只需保存标头(swifty.h)并使用它(在需要的地方导入#swifty.h或将其添加到前缀标头文件pch中):
#ifndef let
#define let __auto_type const
#endif
#ifndef var
#define var __auto_type
#endif