2015-11-09 100 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

是的我发现这个,但不是最理想的解决方案。 –