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