这是我的代码:
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
的{{1}}子类,并且后来构造了一个SimpleInit
而没有将Lizard
的实例传递给构造函数?如果Person
的类型符合Lizard
,则Person
应该能够创建Person
。
答案 0 :(得分:2)
您只需要将初始化程序移至条件扩展名即可:
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())
}
}