为什么下面的代码编译时出错:
无法构造“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() {
    }
}

突然间,我有了一个符合SteeringT的类型,但没有一个接受零参数的init。
解决方案是将init添加到协议中,确保符合它的任何内容都具有正确的init。
protocol Steering {
    func turnWheel()
    init()
}

09-11 05:10