#swift
#swift
Вопрос:
Это мой код:
protocol SimpleInit {
init()
}
class Person {}
class Lizard<T: Person> {
let person: T
init(person: T) {
self.person = person
}
// error: 'where' clause cannot be attached to a non-generic declaration
init() where T: SimpleInit {
self.person = T.init()
}
}
Возможно ли, что у меня есть подкласс Person
, который соответствует SimpleInit
, а затем создает a Lizard
без передачи экземпляра Person
конструктору? Lizard
должен быть в состоянии создать Person
, если тип Person
соответствует SimpleInit
.
Ответ №1:
Вам просто нужно переместить свой инициализатор в условное расширение:
protocol SimpleInit {
init()
}
class Person {
required init() {}
}
class Lizard<T: Person> {
let person: T
required init(person: T) {
self.person = person
}
}
extension Lizard where T: SimpleInit {
convenience init() {
self.init(person: T.init())
}
}