Generics Swift泛型:没有可访问的初始值设定项
为什么下面的代码编译时出现错误: 无法构造“T”,因为它没有可访问的初始值设定项Generics Swift泛型:没有可访问的初始值设定项,generics,swift,Generics,Swift,为什么下面的代码编译时出现错误: 无法构造“T”,因为它没有可访问的初始值设定项 let drive = Drive<Car>() class Car : Steering { init() { } func turnWheel() { } } protocol Steering { func turnWheel() } class Drive<T:Steering> { func Go() { var veh
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()
}
}
let drive=drive()
汽车类别:转向{
init(){}
func转盘(){}
}
协议指导{
func转盘()
}
类驱动器{
func Go(){
var车辆=T()
车辆.转盘()
}
}
因为T
被限制为转向
。您的约束条件是,“T可以是符合转向协议的任何类型。但是,如果我有这个类:
class Airplane : Steering {
init(altitude : Int) {
}
func turnWheel() {
}
}
突然,我有了一个符合转向和T
的类型,但没有接受零参数的init
解决方案是将init添加到协议中,确保符合它的任何内容都具有正确的init
protocol Steering {
func turnWheel()
init()
}
正如编译器所说,您需要在转向声明中使用无参数初始值设定项
由于T仅用于实现转向协议,并且您希望使用T()
构造它,因此协议Steering
需要保证无参数初始值设定项可以像那样构造
protocol Steering {
init();
func turnWheel()
}
class Car : Steering {
required init() { }
func turnWheel() { }
}
谢谢-只检查了另一个答案,因为它比原来早了两分钟,但还是投了赞成票。@Leewitney,事实上,我的答案早了两分钟(悬停在times上查看时间戳)。不过不管怎样,很高兴你的问题解决了。