我看到了这段代码及其变体
var myVar: CGFloat {get set}
{get set}
部分是什么意思?
答案 0 :(得分:1)
这意味着如果您不希望人们将您的变量设置为您将使用的另一个值,那么您的变量会实现一个getter和一个setter:
var myVar: CGFloat {get}
但是,如果您不希望人们能够从变量中读取值,则可以声明为
var myVar: CGFloat {set}
您还可以添加限制和/或行为来获取和设置:
var _myVar:Int = 2
var myVar{
get {
return _myVar * 2 //Always returns the double of the value set
}
set (newVal) {
if newVal >= 0 { //limit the variable to positive numbers
_myVar = newVal
} else {
println('error: myVar has to be greater than zero')
}
}
当然,这些都是简单的例子,根据每个人的需要而变得非常复杂。
您还可以使用private(set)
和internal(set)
来更改每个媒体资源的访问级别。按照苹果公司的例子:
struct TrackedString {
private(set) var numberOfEdits = 0
var value: String = "" {
didSet {
numberOfEdits++
}
}
}
您可以在apple documentation和And in this other document
中详细了解getter,setter,计算机属性等内容我希望能帮到你!
答案 1 :(得分:0)
这些是计算的属性/变量,它们允许变量计算getter或setter的值,而不是标准变量。
getter用于读取值,setter用于写入值。 setter子句是可选的,当只需要一个getter时,你可以省略这两个子句,直接返回所请求的值,如Read-Only Computed Properties中所述。但是如果你提供了一个setter子句,你还必须提供一个getter子句。
setter名称和括号括起来是可选的。如果你提供 一个setter名称,它被用作setter参数的名称。 如果没有提供setter名称,则默认参数名称为 setter是newValue,如Shorthand Setter Declaration中所述。