属性后的Swift括号表示法

时间:2015-06-11 23:10:22

标签: swift

我看到了这段代码及其变体

var myVar: CGFloat {get set}

{get set}部分是什么意思?

2 个答案:

答案 0 :(得分:1)

这意味着如果您不希望人们将您的变量设置为您将使用的另一个值,那么您的变量会实现一个getter和一个setter:

var myVar: CGFloat {get}

但是,如果您不希望人们能够从变量中读取值,则可以声明为

var myVar: CGFloat {set}

您还可以添加限制和/或行为来获取和设置:

  var _myVar:Int = 2
  var myVar{
   get {
     return _myVar * 2 //Always returns the double of the value set
   }
   set (newVal) {
     if newVal >= 0 { //limit the variable to positive numbers
       _myVar = newVal
     } else {
       println('error: myVar has to be greater than zero')
     }
   }

当然,这些都是简单的例子,根据每个人的需要而变得非常复杂。

您还可以使用private(set)internal(set)来更改每个媒体资源的访问级别。按照苹果公司的例子:

struct TrackedString {
    private(set) var numberOfEdits = 0
    var value: String = "" {
        didSet {
            numberOfEdits++
        }
    }
}

您可以在apple documentationAnd in this other document

中详细了解getter,setter,计算机属性等内容

我希望能帮到你!

答案 1 :(得分:0)

这些是计算的属性/变量,它们允许变量计算getter或setter的值,而不是标准变量。

  

getter用于读取值,setter用于写入值。 setter子句是可选的,当只需要一个getter时,你可以省略这两个子句,直接返回所请求的值,如Read-Only Computed Properties中所述。但是如果你提供了一个setter子句,你还必须提供一个getter子句。

     

setter名称和括号括起来是可选的。如果你提供   一个setter名称,它被用作setter参数的名称。   如果没有提供setter名称,则默认参数名称为   setter是newValue,如Shorthand Setter Declaration中所述。

Declarations