我有一块简单的代码来计算面积&菱形的周长。
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
语言指南中看到了设置并通常一起使用。
如果在此代码中确实不需要设置,那么它通常用于什么?
答案 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)