2017-06-08 51 views
0

你好,我目前正在從目標C導入項目到swift。目標C項目使用一個自定義庫,在其中一個類中它具有​​一個接受一個Class對象的函數,該對象在數據加載時使用該類(代碼如下)初始化一個id obj。在目標C方面,這很好用!我在swift上使用了與橋頭相同的庫,但不幸的是一旦數據加載,我的對象就是零。我驗證了用於初始化對象的數據對象是否具有內容。自定義swift類還需要我在添加自定義init()時實現init(data:Data)初始化程序,我對swift很陌生,任何幫助都很棒!謝謝!從目標C庫初始化Swift類

目標C:

庫:

-(id) buildRetObject:(Class)clss fromData(NSData*) data{ 
id obj = nil; 
if (data != nil) { 
obj = [[clss alloc] initWithData:data]; 
} 
} 

自定義對象,是另一個自定義對象的子類,而不是在圖書館,但是,主要的應用程序:

Item.m:

-(id)init{ 
    if ([super init]){ 
     //do something 
    } 

    return self 
} 

swift中的相同項目對象:

//customClass super class is abstactCustomClass which is a sub abstract class of NSObject class, init functions are in here, the abstract class 
class Item: customClass { 

//variables 

override init() { 
    super.init() 
    // do something 
} 

required init!(data: Data){ 
    //fatalError(message here) 
    /*tried calling supers method 
    super.init(data:Data) gives error: fatal error: use of unimplemented initializer 'init(dictionary:)'*/ 
} 

//methods 

}

+1

你能發表一個更完整的例子嗎?什麼是Swift類的定義? – Ssswift

+0

@Ssswift我更新了我的帖子,請讓我知道如果這更有幫助 – paul590

回答

0

經過大量挖我終於能弄明白的,目標C從抽象類知道初始化是什麼,SWIFT沒有。所以我需要做的就是實現這個初始化器並且它可以工作。

required init!(data: Data){ 
    super.init(data:Data) 
} 

override init(dictionary: [AnyHashable: Any]!){ 
    super.init(Dictionary:dictionary) 
}