Initialiser继承混淆

时间:2015-11-09 14:37:05

标签: ios swift inheritance initialization

我正在尝试构建一些模拟基础架构,我希望能够返回一个存根值并计算访问该值的次数。我有这样简单的事情:

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文档的解释是,我应该自动继承初始化器,因为我已经设置了所有存储的属性。

我做错了什么?

1 个答案:

答案 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)
    }
}