2015-10-16 121 views
0

讓我們假設我有Objective C中的類,通過橋接我想在我的swift項目中使用。Swift橋接返回父類對象,而不是派生類

@implementation MyClass 

+ (instancetype)startVideo:(NSInt *)videoName 
{ 
    return [[MyClass alloc] initWithName:videoName 
           offset:@"0"] 

} 

- (instancetype)initWithName:(NSString *)name 
       offset:(NSString *)offset 
{ 

    self = [super init]; 

    return self; 
} 

現在有兩個構造函數將在迅速版本橋接後

class MyClass{ 
    public convenience init!(videoName: String!) 
    public init(name: String!, offset: String) 
} 

我從MyClass的,我迅速的項目

class MyClass2 : MyClass{ 
    var purposeOfClass: String = "Child class" 
} 

派生類使用創建MyClass2的對象便利方法

var obj = MyClass2("Swift.mov") 
print(obj.purposeOfClass) // You will get exception at this point, because the constructor returned Parent's class object. 

這裏我的問題是爲什麼橋接轉換使靜態方法初始化方便初始值設定項如果派生類返回對象無法檢查。

回答

0

以迅速init方法從目標C截斷參數名稱

- (instancetype)initWithFoo:(NSString *)foo 

到夫特

init(foo : String) 

是強制性的。你必須寫

let obj = MyClass2(videoName:"Swift.mov") 
print(obj.purposeOfClass)