为什么下面的代码编译时出错:
无法构造“t”,因为它没有可访问的初始值设定项
let drive = Drive<Car>()
class Car : Steering {
init() { }
func turnWheel() { }
}
protocol Steering {
func turnWheel()
}
class Drive<T:Steering> {
func Go() {
var vehicle = T()
vehicle.turnWheel()
}
}
最佳答案
因为T
被约束为Steering
。您的约束说,“t可以是任何符合Steering
协议的类型。但是,如果我有这门课:
class Airplane : Steering {
init(altitude : Int) {
}
func turnWheel() {
}
}
突然间,我有了一个符合
Steering
和T
的类型,但没有一个接受零参数的init。解决方案是将init添加到协议中,确保符合它的任何内容都具有正确的init。
protocol Steering {
func turnWheel()
init()
}