2016-02-29 66 views
1

我正试图在swift项目中采用在objective-c中编写的SDK。 Objective-C的方式来初始化SDK如下:swift中的箭头运算符

@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]; 

我不相信有一个相当于箭头运营商迅速,所以是有可能仍然初始化?我似乎无法找到关于他特定主题的任何信息。

回答

0

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

但斯威夫特并没有提到这种区别。在Swift的类型声明的顶级声明的变量是属性;在幕后,存储属性具有访问器方法,当您获取/设置属性时,您将自动通过这些方法。没有单独的实例变量来获取/设置。

要明白我的意思,请与类的东西,其界面看起来像这样的混合动力雨燕/ Objective-C的应用:

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

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

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

+0

感谢您的快速和完整的回应。该SDK不是我的,但我应该可以添加该属性。 – sully77

相关问题