如何在Swift

时间:2016-07-19 06:36:55

标签: ios get swift2 set

我有一块简单的代码来计算面积&菱形的周长。

 var perimeterOfRhombus: Double {
        get {
            let twoSides1 = sideLength1 + sideLength1
            let twoSides2 = sideLength2 + sideLength2
            let finalPerimeter = twoSides1 + twoSides2
            return finalPerimeter
        } set {
      }
    }

我缺少的是设置部分。

我希望它能显示sideLength1和sideLength2在开头的内容。

我不确定newValue用于什么时,它没有任何价值。

它确实可以在不使用set的情况下工作,但我在Apple的swift语言指南中看到了设置并通常一起使用。

如果在此代码中确实不需要设置,那么它通常用于什么?

2 个答案:

答案 0 :(得分:15)

您应该引用只读计算属性而不是计算属性。

带有getter但没有setter的计算属性称为只读计算属性。它总是返回一个值,不能设置为不同的值。

 var perimeterOfRhombus: Double {
  let twoSides1 = sideLength1 + sideLength1
  let twoSides2 = sideLength2 + sideLength2
  let finalPerimeter = twoSides1 + twoSides2
  return finalPerimeter
 }

计算属性实际上不存储值。相反,它们提供了一个getter和一个可选的setter来间接检索和设置其他属性和值。

计算属性(包括只读属性)必须设置为变量而不是常量。

 struct Square {
  var edge: Double = 0

  var area: Double {
    get {
      return edge * edge
    }
    set (newArea){
      edge = sqrt(newArea)
    }
  }
 }

在这种情况下,setter不能用于设置属性的值,而是用于设置计算计算属性的其他属性的值。

关于newValue,它被称为速记设定者声明 - 如果计算属性的设置者没有为要设置的新值定义名称,则默认名称为{使用{1}}。

所以,上面的例子变成了

newValue

答案 1 :(得分:0)

使用get和set迅速计算属性

class Square {
    var side: Double = 0.0
    var area: Double {
        get {
            return side*side
        }
        set(newArea) {
            print(newArea)
            self.side = sqrt(newArea)
        }
    }
}

let obj = Square()
obj.side = 10.0
print(obj.area)