在swift中,括号中的内容是什么意思?

时间:2016-03-12 22:34:19

标签: swift class variables accessor

Getters和setter是可以理解的,但是在按照文本教程后,我很难理解“设置”这个词的含义。在括号中表示何时声明变量?

 private (set) var price:Double{
    get{return priceBackingValue}
    set{priceBackingValue=max(1,newValue)}
}

添加'(设置)'的目的是什么?在变量范围和命名约定中?

2 个答案:

答案 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 在评论中指出的那样,显然将类放入相同的文件会将类的私有成员/属性暴露给同一文件中的其他成员/属性,所以如果你把它考虑在内将多个类放入文件中。