Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在不使用签名中的类型的情况下创建受约束的初始值设定项_Swift - Fatal编程技术网

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())
}
}