Car*_*ith 5 get set ios swift2
我有一块简单的代码来计算菱形的面积和周长.
var perimeterOfRhombus: Double {
get {
let twoSides1 = sideLength1 + sideLength1
let twoSides2 = sideLength2 + sideLength2
let finalPerimeter = twoSides1 + twoSides2
return finalPerimeter
} set {
}
}
Run Code Online (Sandbox Code Playgroud)
我缺少的是设置部分.
我想让它显示sideLength1和sideLength2在开头是什么.
当它没有价值时,我不确定使用什么newValue.
它确实可以在不使用set的情况下工作,但我在Apple的swift语言指南中看到,设置和通常一起使用.
如果在此代码中确实不需要set,那么它通常用于什么?
Aji*_*yak 16
您应该引用只读计算属性而不是计算属性.
具有getter但没有setter的计算属性称为只读计算属性.它始终返回一个值,并且不能设置为其他值.
var perimeterOfRhombus: Double {
let twoSides1 = sideLength1 + sideLength1
let twoSides2 = sideLength2 + sideLength2
let finalPerimeter = twoSides1 + twoSides2
return finalPerimeter
}
Run Code Online (Sandbox Code Playgroud)
计算属性实际上不存储值.相反,它们提供了一个getter和一个可选的setter来间接检索和设置其他属性和值.
计算属性(包括只读属性)必须设置为变量而不是常量.
struct Square {
var edge: Double = 0
var area: Double {
get {
return edge * edge
}
set (newArea){
edge = sqrt(newArea)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,setter不能用于设置属性的值,而是用于设置计算计算属性的其他属性的值.
关于newValue,它被称为速记设置器声明 - 如果计算属性的设置器没有为要设置的新值定义名称,newValue则使用默认名称.
所以,上面的例子变成了
struct Square {
var edge: Double = 0
var area: Double {
get {
return edge * edge
}
set {
edge = sqrt(newValue) //someSquare.area = 25 (25 is newValue)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16623 次 |
| 最近记录: |