Getters和setter是可以理解的,但是在按照文本教程后,我很难理解“设置”这个词的含义。在括号中表示何时声明变量?
private (set) var price:Double{
get{return priceBackingValue}
set{priceBackingValue=max(1,newValue)}
}
添加'(设置)'的目的是什么?在变量范围和命名约定中?
答案 0 :(得分:2)
这意味着用于设置变量price
的访问修饰符是私有的,因为仍然可以访问变量(也就是get),就好像它是公共的一样。
class Doge {
private(set) let name = ""
func someMethod(newName: String) {
name = newName //This is okay because are setting the name from within the file
}
}
在另一个文件中(注意:私有对文件而言是私有的而不是类!):
let myDoge = Doge()
print(myDoge.name) //This is okay as we can still access the variable outside of the file
myDoge.name = "foo" //This is NOT okay as we can't set the variable from outside the file
编辑:更准确地提及私人如何应用于文件而不是实际的类 - 正如@sschale所提到的
答案 1 :(得分:2)
它基本上表明变量price
只能由定义它的类设置,即它是一个私有的setter。如果您希望变量由其他类可读,但只能由定义它的类设置,这很方便。
class A {
private (set) var foo = "foo" // variable can be read by other classes in the same scope, but NOT written to(!)
}
let a = A()
a.foo // fine! You can only read this one though!
而在本例中,其他类根本无法访问该变量(既不可设置也不可获取)
class B {
private var bar = "bar" // other classes have no access to this variable
}
let b = B()
b.bar // you cannot read/write this variable
正如 sschale 在评论中指出的那样,显然将类放入相同的文件会将类的私有成员/属性暴露给同一文件中的其他成员/属性,所以如果你把它考虑在内将多个类放入文件中。