我正在尝试构建一些模拟基础架构,我希望能够返回一个存根值并计算访问该值的次数。我有这样简单的事情:
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
我对Swift文档的解释是,我应该自动继承初始化器,因为我已经设置了所有存储的属性。
我做错了什么?
答案 0 :(得分: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)
}
}