为什么下面的代码编译时出现错误:'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()
}
}
Run Code Online (Sandbox Code Playgroud)
因为T受到限制Steering.你的约束说,"T可以是任何符合Steering协议的类型.但是,如果我有这个类:
class Airplane : Steering {
init(altitude : Int) {
}
func turnWheel() {
}
}
Run Code Online (Sandbox Code Playgroud)
突然之间我必须符合一类Steering和T,但没有接受零个参数一个init.
解决方案是将init添加到您的协议中,确保符合它的任何内容都具有正确的init.
protocol Steering {
func turnWheel()
init()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8171 次 |
| 最近记录: |