Swift不会让我编译以下带有错误消息的代码
使用元类型值构造类类型为“ T”的对象时,必须使用“必需”初始化程序
在指示的行上。协议明确要求使用的初始化程序。将构造移入初始化程序会导致相同的问题。如果删除where Self: ChannelUser
(以及使用其方法的代码),则所有内容都会编译。也可以通过在ChannelUser中要求使用初始化程序来解决此问题,但这显然不切实际。
为什么会这样?我是在做错什么还是这是一个错误?
class ChannelUser {
func ready() {
print("ready")
}
}
class A: ChannelUser { // Cannot be used with MockChannelUser because the initializer takes an Int
init(a: Int) {
// do something clever with a
}
}
class B: ChannelUser, MockableChannelUser { // Can be used with MockChannelUser
override required init() {}
}
protocol MockableChannelUser where Self: ChannelUser {
init()
}
struct MockChannelUser<T: MockableChannelUser> {
let user = T() // Error: Constructing an object of class type 'T' with a metatype value must use a 'required' initializer
init() {
user.ready()
}
}