【问题标题】:Stored property without initial value prevents synthesized initializers没有初始值的存储属性会阻止合成初始化程序
【发布时间】:2020-04-06 07:02:00
【问题描述】:

我声明一个协议:

 protocol FullNameable {
        var fullName: String {get set}
    }

然后对类和结构采用上述协议,如下所示:

struct LectureStruct: FullNameable {
    var fullName: String
}

class LectureClass: FullNameable {
    var fullName: String
}

但是对于类我收到错误 - 没有初始值的存储属性“fullName”会阻止合成初始值设定项。为什么这个错误不是针对结构的?

【问题讨论】:

  • swift 结构有默认构造函数,包括所有未定义的属性,在这种情况下类必须有显式构造函数(由于继承)。

标签: swift properties protocols


【解决方案1】:

据斯威夫特documentation

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

let vga = Resolution(width: 640, height: 480)

与结构不同,类实例不接收默认成员 初始化器。

在您的情况下,您可以使用以下方法实例化 LectureStruct

let lecture = LectureStruct(fullName: "Match Lecture")

为了对LectureClass 做同样的事情,您需要像这样定义一个 init 方法:

class LectureClass: FullNameable {
    var fullName: String

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

【讨论】:

    猜你喜欢
    • 2017-12-31
    • 2015-06-22
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多