快速的箭头操作符

时间:2016-02-29 02:37:54

标签: swift objective-c-swift-bridge

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

$obj->s->p

我不相信swift中的箭头运算符等价,所以仍然可以初始化吗?我似乎无法找到有关他特定主题的任何信息。

1 个答案:

答案 0 :(得分:0)

在Objective-C中,属性仅仅是存取方法的语法糖;如果通常情况下这些是实例变量的前端,那么您可以通过正确的隐私访问绕过访问器方法(或者首先没有它们)并直接获取/设置实例变量。这就是你的代码正在做的事情。

但斯威夫特没有画出这种区别。在类型声明的顶级声明的变量,在Swift中,属性;在幕后,存储的属性具有存取方法,当您获取/设置属性时,您将自动传递这些方法。没有单独的实例变量来获取/设置。

要了解我的意思,请使用类Thing创建一个混合的Swift / Objective-C应用程序,其界面如下所示:

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

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

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