快速等同于objective-c const吗?

时间:2017-07-12 21:08:47

标签: objective-c swift

这是在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之间的区别。

2 个答案:

答案 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