swift 中的箭头运算符

arrow operator in swift

我正在尝试在 swift 项目中采用用 objective-c 编写的 SDK。 objective-c初始化SDK的方式如下:

@implementation ViewController
nokeSDK *nokelock;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //INITIALIZE NOKE SDK
    nokelock = [[nokeSDK alloc] init];
    nokelock->cmd = [[nokecommand alloc] init];

我不相信 swift 中有与箭头运算符等效的东西,所以是否仍然可以初始化?我似乎找不到关于他的特定主题的任何信息。

在Objective-C中,属性只是访问器方法的语法糖;如果,通常情况下,这些是实例变量的前端,您可以通过正确的隐私访问绕过访问器方法(或者首先不使用它们)并直接 get/set 实例变量.这就是您的代码正在做的事情。

但是 Swift 并没有做出那种区分。在类型声明的顶层声明的变量,在Swift、中是 a 属性;在幕后,存储的 属性 具有访问器方法,当您 get/set 属性 时,您会自动传递这些方法。 get/set.

没有单独的实例变量

为了理解我的意思,制作一个混合 Swift / Objective-C 应用程序 class 其界面如下所示:

@interface Thing : NSObject {
    @public
    NSString* s;
}

现在创建生成的界面。你会看到,在Swift中,s是无处可见的。

据推测,因此,要重写您的代码,您需要将 cmd 转换为 属性,或者至少提供一个 setter 方法。否则,Swift 将永远无法设置 Objective-C cmd 实例变量。当然,如果Swift中的nokeSDK也由你重写,你的问题就结束了,因为你现在可以做任何你想做的事了。