Swift 在不使用签名中的类型的情况下创建受约束的初始值设定项
这是我的代码:Swift 在不使用签名中的类型的情况下创建受约束的初始值设定项,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
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()
}
}
协议简化单元{
init()
}
类人{}
蜥蜴纲{
让人:T
初始(人员:T){
self.person=人
}
//错误:“where”子句不能附加到非泛型声明
init(),其中T:SimpleInit{
self.person=T.init()
}
}
我是否有可能拥有一个子类
Person
,它符合SimpleInit
,然后在不将Person
的实例传递给构造函数的情况下构造一个Lizard
Lizard
应该能够创建一个Person
如果Person
的类型符合SimpleInit
您只需要将初始值设定项移动到一个条件扩展名中:
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())
}
}
协议简化单元{
init()
}
班主任{
必需的init(){}
}
蜥蜴纲{
让人:T
所需初始(人员:T){
self.person=人
}
}
扩展蜥蜴,其中T:SimpleInit{
便利初始化(){
self.init(person:T.init())
}
}
您只需将初始值设定项移动到条件扩展中:
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())
}
}
协议简化单元{
init()
}
班主任{
必需的init(){}
}
蜥蜴纲{
让人:T
所需初始(人员:T){
self.person=人
}
}
扩展蜥蜴,其中T:SimpleInit{
便利初始化(){
self.init(person:T.init())
}
}