2016-02-29 98 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

相關問題