我已经知道如何private(set)
作品。但下面的代码给出了编译时错误,
class Person {
private(set) let name: String //Error.
private(set) let age: Int //Error.
init(name: String, age: Int){
self.name = name
self.age = age
}
}
Error:
“private(set)”修饰符不能应用于只读属性
Since name
and age
不是只读属性,它不应该给出这样的错误。
如果我使用let
代替var
,工作正常。只是想知道为什么?
private(set) let
是一个自相矛盾的术语。任何二传手都需要var
iable.
请注意,为属性分配默认值不是set根据初始化设置属性。为此didSet
为属性分配默认值后不会调用属性观察器。
在 Swift 中只有one使用案例private(set)
:如果类包含修改变量的代码
class Foo {
let name : String
private(set) var expiryDate : Date
init(name: String, expiryDate: Date){
self.name = name
self.expiryDate = expiryDate
}
func extendExpiryDate(to newDate : Date) {
expiryDate = newDate
}
}
如果该属性仅在期间初始化init
它是一个常量 - 正如其他答案中正确提到的那样 - 所以将其声明为let
持续的。与其他编程语言不同,Swift 提供显式常量,具有更高的安全性、更少的内存使用量和更好的性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)