Swift не позволит мне скомпилировать следующий код с сообщением об ошибке
Для создания объекта типа класса 'T' со значением метатипа необходимо использовать инициализатор 'required'
в указанной строке.Используемый инициализатор явно требуется протоколом.Перемещение конструкции в инициализатор вызывает ту же проблему.Если я удаляю 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()
}
}