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_Properties_Protocols - Fatal编程技术网

Swift 没有初始值的存储属性阻止合成初始值设定项

Swift 没有初始值的存储属性阻止合成初始值设定项,swift,properties,protocols,Swift,Properties,Protocols,我宣布一项协议: protocol FullNameable { var fullName: String {get set} } 然后对类和结构采用上述协议,如下所示: struct LectureStruct: FullNameable { var fullName: String } class LectureClass: FullNameable { var fullName: String } 但对于类,我得到的是错误存储的属性“full

我宣布一项协议:

 protocol FullNameable {
        var fullName: String {get set}
    }
然后对类和结构采用上述协议,如下所示:

struct LectureStruct: FullNameable {
    var fullName: String
}

class LectureClass: FullNameable {
    var fullName: String
}
但对于类,我得到的是错误存储的属性“fullName”,没有初始值。为什么此错误不适用于结构?

根据swift:

所有结构都有一个自动生成的成员初始值设定项, 您可以使用它初始化新结构的成员属性 实例。新实例的属性的初始值可以 按名称传递给成员初始值设定项

与结构不同,类实例不接收默认的memberwise 初始化器

在您的情况下,您可以使用以下命令实例化讲师struct:

为了对讲师类执行相同的操作,您需要定义一个init方法,如下所示:

class LectureClass: FullNameable {
    var fullName: String

    init(fullName: String) {
        self.fullName = fullName
    }
}

swift结构具有默认构造函数,包括所有未定义的属性,在这种情况下,由于继承,类必须具有显式构造函数。
let lecture = LectureStruct(fullName: "Match Lecture")
class LectureClass: FullNameable {
    var fullName: String

    init(fullName: String) {
        self.fullName = fullName
    }
}