我正在尝试在swift项目中采用Objective-c编写的SDK。初始化SDK的Objective-c方式如下:
$obj->s->p
我不相信swift中的箭头运算符等价,所以仍然可以初始化吗?我似乎无法找到有关他特定主题的任何信息。
答案 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
,你的问题就会结束,因为你现在可以随心所欲。