swift中括号里set是什么意思?
In swift, what does set in parentheses mean?
getter 和 setter 是可以理解的,但是在按照文本教程进行操作后,我无法理解括号中的单词 'set' 在声明变量时的含义?
private (set) var price:Double{
get{return priceBackingValue}
set{priceBackingValue=max(1,newValue)}
}
在变量范围和命名约定中添加'(set)'的目的是什么?
这意味着设置变量 price
的访问修饰符是私有的,因为变量仍然可以像 public.[=13= 一样被访问(又名.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
}
}
在不同的文件中(注意:private 表示文件私有而不是 class!):
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
编辑: 更准确地提及 private 如何应用于文件而不是 class - 正如@sschale
所提到的
它基本上表明变量price
只能由定义它的class设置,即它是一个私有的setter。这在您希望变量对其他 class 是 可读 ,但只能由定义它的 class 设置的情况下很方便。
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 根本无法访问该变量(既不可设置也不可获取)
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 在评论中指出的那样,显然将 classes 放入相同的文件中会暴露 [=24= 的私有 members/properties ] 给同一文件中的其他人,因此如果您将多个 class 放入文件中,请考虑到这一点。
getter 和 setter 是可以理解的,但是在按照文本教程进行操作后,我无法理解括号中的单词 'set' 在声明变量时的含义?
private (set) var price:Double{
get{return priceBackingValue}
set{priceBackingValue=max(1,newValue)}
}
在变量范围和命名约定中添加'(set)'的目的是什么?
这意味着设置变量 price
的访问修饰符是私有的,因为变量仍然可以像 public.[=13= 一样被访问(又名.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
}
}
在不同的文件中(注意:private 表示文件私有而不是 class!):
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
编辑: 更准确地提及 private 如何应用于文件而不是 class - 正如@sschale
所提到的它基本上表明变量price
只能由定义它的class设置,即它是一个私有的setter。这在您希望变量对其他 class 是 可读 ,但只能由定义它的 class 设置的情况下很方便。
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 根本无法访问该变量(既不可设置也不可获取)
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 在评论中指出的那样,显然将 classes 放入相同的文件中会暴露 [=24= 的私有 members/properties ] 给同一文件中的其他人,因此如果您将多个 class 放入文件中,请考虑到这一点。