将值设置为 SWIFT 中的计算属性
Set value to computed properties in SWIFT
我正在尝试学习 swift 中的计算属性..并且知道我需要 setter 来设置计算属性的值..我正在尝试但是卡住了..请帮助我如何我是否在具有 setter 属性的区域中设置值...如果你能告诉我如何使用 setter 属性 以及何时使用它会很棒
class ViewController: UIViewController {
var width : Int = 20
var height : Int = 400
var area: Int{
get{
return width * height
}set(newarea){
area = newarea*10
//these line gives me an warning and area is not set
}
}
override func viewDidLoad() {
super.viewDidLoad()
println("\(width)")
println("\(height)")
println("\(area)")
// gives an error while setting value to computed properties... area = 5000
// for that we need getter and setter properties in area...
area = 490
println("the new area for computed properties is as \(area)")
}
编辑:但是我发现我可以更改计算属性的其他属性,它是从中派生的
set(newValue){
// self.area = newValue
width = newValue/10
println("the new width for computed properties is as \(width)")
}
}
但是如果我想更改计算的 属性 iteself
怎么办
计算的 属性 就是:一个计算值,在您的情况下来自
宽度和高度。没有属性所在的实例变量
值已存储,您无法更改 "computed property itself".
这毫无意义:如果区域可以设置为不同的值,
getter 方法 return 应该是什么?这个新值或 width*height
?
所以很可能你想要一个只读的计算属性区域:
var area: Int {
get {
return width * height
}
}
正如您已经注意到的,setter 可以修改其他的值
存储个属性,例如:
class Rectangle {
var width : Int = 20
var height : Int = 400
var area: Int {
get {
return width * height
}
set(newArea){
// Make it a square with the approximate given area:
width = Int(sqrt(Double(newArea)))
height = width
}
}
}
但即便如此,结果也可能令人惊讶(由于整数四舍五入):
let r = Rectangle()
r.area = 200
println(r.area) // 196
我认为您误解了计算 属性 的概念。根据定义,计算的 属性 是您无法设置其值的值,因为它是计算出来的。它没有独立的存在。 computed 属性 中 setter 的目的不是设置 属性 的值,而是设置其他属性的值,computed 属性 是从这些属性计算出来的.以一个正方形为例。它的边长是 var 属性 s,面积是计算的 属性,其 getter returns s*s,其 setter 将 s 设置为正方形newValue(新区域)的根。 setter 不设置区域。它设置边长,下次访问该区域时将根据该边长计算区域 属性。
Computed 属性 不存储值,而是提供 getter 和可选的 setter,它们分别间接检索和设置其他属性和值。
struct Point {
var x = 0.0 ,y = 0.0
}
struct Shape {
var origin = Point()
var centre : Point {
get {
return Point (x:origin.x/2 y:origin.y/2)
}
set(newCentre) {
origin.x = newCentre.x/2
origin.y = newCentre.y/2
}
}
}
Shape 结构为名为 Center 的计算变量定义了自定义 getter 和 setter 方法。The Center
属性 然后通过点语法访问,这导致 getter 调用中心检索当前 属性 值。而不是返回现有值,getter 实际上计算和 returns 代表形状中心的新点。
如果 Computed 属性 setter 没有为要设置的新值定义名称,则使用默认名称 "newValue"
下面是 Rect 结构的替代版本,它利用了这个 shorthand 符号。
struct Point {
var x = 0.0
var y = 0.0
}
struct Shape {
var origin = Point()
var centre : Point {
get {
return Point (x:origin.x/2 y:origin.y/2)
}
set(newCentre) {
origin.x = newValue.x/2
origin.y = newValue.y/2
}
}
}
重要 - 带有 getter 但没有 setter 的计算 属性 被称为只读计算 属性。它总是 returns 一个值,可以通过点语法访问。但是不能更改该值。
我正在尝试学习 swift 中的计算属性..并且知道我需要 setter 来设置计算属性的值..我正在尝试但是卡住了..请帮助我如何我是否在具有 setter 属性的区域中设置值...如果你能告诉我如何使用 setter 属性 以及何时使用它会很棒
class ViewController: UIViewController {
var width : Int = 20
var height : Int = 400
var area: Int{
get{
return width * height
}set(newarea){
area = newarea*10
//these line gives me an warning and area is not set
}
}
override func viewDidLoad() {
super.viewDidLoad()
println("\(width)")
println("\(height)")
println("\(area)")
// gives an error while setting value to computed properties... area = 5000
// for that we need getter and setter properties in area...
area = 490
println("the new area for computed properties is as \(area)")
}
编辑:但是我发现我可以更改计算属性的其他属性,它是从中派生的
set(newValue){
// self.area = newValue
width = newValue/10
println("the new width for computed properties is as \(width)")
}
}
但是如果我想更改计算的 属性 iteself
怎么办计算的 属性 就是:一个计算值,在您的情况下来自 宽度和高度。没有属性所在的实例变量 值已存储,您无法更改 "computed property itself".
这毫无意义:如果区域可以设置为不同的值,
getter 方法 return 应该是什么?这个新值或 width*height
?
所以很可能你想要一个只读的计算属性区域:
var area: Int {
get {
return width * height
}
}
正如您已经注意到的,setter 可以修改其他的值 存储个属性,例如:
class Rectangle {
var width : Int = 20
var height : Int = 400
var area: Int {
get {
return width * height
}
set(newArea){
// Make it a square with the approximate given area:
width = Int(sqrt(Double(newArea)))
height = width
}
}
}
但即便如此,结果也可能令人惊讶(由于整数四舍五入):
let r = Rectangle()
r.area = 200
println(r.area) // 196
我认为您误解了计算 属性 的概念。根据定义,计算的 属性 是您无法设置其值的值,因为它是计算出来的。它没有独立的存在。 computed 属性 中 setter 的目的不是设置 属性 的值,而是设置其他属性的值,computed 属性 是从这些属性计算出来的.以一个正方形为例。它的边长是 var 属性 s,面积是计算的 属性,其 getter returns s*s,其 setter 将 s 设置为正方形newValue(新区域)的根。 setter 不设置区域。它设置边长,下次访问该区域时将根据该边长计算区域 属性。
Computed 属性 不存储值,而是提供 getter 和可选的 setter,它们分别间接检索和设置其他属性和值。
struct Point {
var x = 0.0 ,y = 0.0
}
struct Shape {
var origin = Point()
var centre : Point {
get {
return Point (x:origin.x/2 y:origin.y/2)
}
set(newCentre) {
origin.x = newCentre.x/2
origin.y = newCentre.y/2
}
}
}
Shape 结构为名为 Center 的计算变量定义了自定义 getter 和 setter 方法。The Center 属性 然后通过点语法访问,这导致 getter 调用中心检索当前 属性 值。而不是返回现有值,getter 实际上计算和 returns 代表形状中心的新点。 如果 Computed 属性 setter 没有为要设置的新值定义名称,则使用默认名称 "newValue" 下面是 Rect 结构的替代版本,它利用了这个 shorthand 符号。
struct Point {
var x = 0.0
var y = 0.0
}
struct Shape {
var origin = Point()
var centre : Point {
get {
return Point (x:origin.x/2 y:origin.y/2)
}
set(newCentre) {
origin.x = newValue.x/2
origin.y = newValue.y/2
}
}
}
重要 - 带有 getter 但没有 setter 的计算 属性 被称为只读计算 属性。它总是 returns 一个值,可以通过点语法访问。但是不能更改该值。