2015-11-09 141 views
2

我正在嘗試構建一些模擬基礎結構,我希望能夠返回存根值並計算訪問該值的次數。我有一個像這樣簡單的東西:Initializer繼承混淆

class BasicMock<T> { 

    var callsCount = 0 
    private let backing: T 

    var result: T { 
     callsCount++ 
     return backing 
    } 

    init(result: T) { 
     self.backing = result 
    } 

} 

class MockTimeDefinitionSerialiser: BasicMock<[String: [AnyObject]]>, TimeDefinitionSerialiserProtocol { 

    func serialiseTravelTime(travelTime: JSSTravelTime) -> [String: AnyObject] { 
     return result 
    } 
} 

但是試圖建立它:

let mockTimeDefinitionSerialiser = MockTimeDefinitionSerialiser(result: ["": ""]) 

發出錯誤'MockTimeDefinitionSerialiser' cannot be constructed because it has no accessible initialisers

我的雨燕文檔的解釋是,我應該自動繼承初始化器作爲我已經設置了所有存儲的屬性。

我在做什麼錯?

回答

1

請在提問時刪除任何不必要的代碼。我能減少你的問題是:

class Base<T> { 
    init(t: T) {} 
} 

class Sub: Base<Int> {} 

Sub(t: 0) // error: 'Sub' cannot be constructed because it has no accessible initialisers 

看來,即使你在子類中指定的T一樣,編譯器不能推斷出初始化劑用來T。我無法找到一種方法來獲得初始化程序繼承,你必須使用一種解決方法:

class Sub: Base<Int> { 
    override init(t: Int) { 
     super.init(t: t) 
    } 
} 
+0

是的我發現這個,但不是最理想的解決方案。 –