Swift Generics:没有可访问的初始化器

whi*_*and 3 generics swift

为什么下面的代码编译时出现错误:'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)

vcs*_*nes 6

因为T受到限制Steering.你的约束说,"T可以是任何符合Steering协议的类型.但是,如果我有这个类:

class Airplane : Steering {
    init(altitude : Int) {
    }

    func turnWheel() {
    }
}
Run Code Online (Sandbox Code Playgroud)

突然之间我必须符合一类SteeringT,但没有接受零个参数一个init.

解决方案是将init添加到您的协议中,确保符合它的任何内容都具有正确的init.

protocol Steering {
    func turnWheel()
    init()
}
Run Code Online (Sandbox Code Playgroud)