gpt4 book ai didi

macos - 不寻常的 Swift Idiom - 它实现了什么?

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:24 27 4
gpt4 key购买 nike

我正在阅读一本关于 Swift 设计模式的书,并遇到了一个示例,作者希望确保任何初始化特定类的子类的人都必须传入基类所需的值:

class Employee {
private var professionBV: String // BV = backingVariable

private init(profession: String) {
self.professionBV = profession
}

final var profession: String {
return professionBV
}
}

// Even if you create your own init here, you always have to pass in a
// value for profession
class Nurse: Employee { }

我不明白的是作者通过将支持变量与计算属性结合使用获得了什么。不就等同于这样吗:

// Remove the backing variable, mark profession as final - what have I lost?
class Employee {
final private var profession: String

private init(profession: String) {
self.profession = profession
}
}

最佳答案

你是对的 - 如果没有 setter 和额外的处理逻辑,你从这种“支持变量”方法中获益甚微。这只是困惑。如果稍后你发现你想在类用户和实际存储的变量之间放置一些逻辑,你总是可以将它切换到一个计算属性(或者添加一个 willSet/didSet)。事实上,如果值在初始化后是不可变的,它应该用 let 而不是 var 来声明。这听起来像是来自 Java 或 C# 程序员的建议,将这些语言的实践应用于 Swift。

出于兴趣,这是什么书?

关于macos - 不寻常的 Swift Idiom - 它实现了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29043084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com