我正在学习Swift,我正在阅读Apple的Swift编程语言。我没有任何Objective-C背景(只有PHP、JavaScript和其他,但没有Objective-C)。
在第24-25页上,我看到了以下代码:
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
这部分在书中没有指定,我不知道它们是用来做什么的。
什么是get和set
发布于 2014-07-11 22:13:56
类中变量的获取和设置指的是检索(“获取”)或修改(“设置”)它们的内容。
考虑family
类的变量members
。当然,这个变量需要是一个整数,因为一个家庭永远不能由两个点组成。
因此,您可能会像这样定义members
变量:
class family {
var members:Int
}
然而,这将使使用这个类的人有可能将家庭成员的数量设置为类似于0或1的东西。由于不存在1或0的家庭,这是相当不幸的。
这就是getter和setter的用武之地。这样,您就可以自己决定如何更改变量以及它们可以接收什么值,以及决定它们返回的内容。
返回到我们的家庭类,让我们确保没有人可以将members
值设置为小于2的任何值:
class family {
var _members:Int = 2
var members:Int {
get {
return _members
}
set (newVal) {
if newVal >= 2 {
_members = newVal
} else {
println('error: cannot have family with less than 2 members')
}
}
}
}
现在,我们可以像以前一样通过输入instanceOfFamily.members
来访问members
变量,并且通过setter函数,我们还可以像以前一样设置它的值,例如通过输入:instanceOfFamily.members = 3
。然而,改变的是,我们不能再将此变量设置为小于2的值。
注意引入了_members
变量,它是存储我们通过members
设置器函数设置的值的实际变量。最初的members
现在已经成为一个计算属性,这意味着它只作为一个接口来处理我们的实际变量。
发布于 2015-11-16 10:16:00
一个简单的问题后面应该有一个简短、简单和清晰的答案。
get{}
部件。set{}
部件。PS。当为属性设置值时,Swift会自动创建一个常量"newValue“=我们正在设置的值。在属性的set{}
部分中可以访问常量"newValue“之后。
示例:
var A:Int = 0
var B:Int = 0
var C:Int {
get {return 1}
set {print("Recived new value", newValue, " and stored into 'B' ")
B = newValue
}
}
// When we are getting a value of C it fires get{} part of C property
A = C
A // Now A = 1
// When we are setting a value to C it fires set{} part of C property
C = 2
B // Now B = 2
发布于 2014-07-11 22:01:41
你应该看看Computed Properties。
在您的代码示例中,perimeter
是一个未由类变量支持的属性。相反,它的值是使用get
方法计算的,并通过set
方法存储--通常称为getter和setter。
当您像这样使用该属性时:
var cp = myClass.perimeter
您正在调用包含在get
代码块中的代码,当您像这样使用它时:
myClass.perimeter = 5.0
您正在调用set
代码块中包含的代码,其中newValue
将自动填充赋值操作符右侧提供的值。
如果同时指定了getter和setter,则计算属性可以是读/写的;如果仅指定了getter,则计算属性可以是只读的。
https://stackoverflow.com/questions/24699327
复制相似问题