Swift什么是'get'和'set'?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我正在学习Swift,我正在The Swift Programming Language从Apple 阅读,我没有Objective C背景(只有PHP,JS和其他,但没有Obj C)

在第24-25页我看到这个代码:

//...Class definition stuff...

var perimeter: Double {
    get {
        return 3.0 * sideLength
    }
    set {
        sideLength = newValue / 3.0
    }
}

//...Class continues...

这部分没有在书中指定,我无法得到这些内容。

谁可以解释我得到设定的是什么?

提问于
用户回答回答于

这实际上是在代码之前解释的:

除了存储的简单属性外,属性还可以有一个getter和一个setter。 class EquilateralTriangle: NamedShape { ...

当其他类想要获得周长变量时,他们这样做:

let someVar = myTriangle.perimeter

就是这样调用的:

get{
    return 3.0 * self.sideLength
}

因此,它基本上就像调用控制器这样做:

let someVar = 3.0 * myTriangle.sideLength

当你从另一个对象设置变量时,它看起来像这样:

myTriangle.perimeter = 100

它调用set{}块中的代码:

set {
    sideLength = newValue / 3.0
}

所以就好像设置变量的类已经这样做了:

myTriangle.sideLength = 100/3.0

这只是为了方便 - 你可以从其他代码中调用此函数,而不必一直划分或乘以3,因为这是在设置变量之前完成的,并且在获取变量之前完成。

在Swift中,我们可以获得计算得到的属性,并且可以在设置时执行某些操作。我们也可以在Objective-C中做到这一点:

// .h
@property (nonatomic) double perimeter;

//.m

- (double)perimeter
{
    return self.sideLength * 3.0;
}
- (void)setPerimeter:(double)perimeter
{
    self.perimeter = perimeter; // In Swift, this is done automatically.
    self.sideLength = perimeter / 3.0;
}
用户回答回答于

类中变量的获取和设置指的是检索(“获取”)或更改(“设置”)其内容。

考虑members一个类的变量family。当然,这个变量需要是一个整数。

所以你可能会members像这样定义变量:

class family {
   var members:Int
}

然而,这样可以让人们使用这个类将家庭成员的数量设置为0或1这样的可能性。

但通过这种方式,可以自己决定如何改变变量以及可以接收什么值,以及决定返回的内容。

回到我们的家庭类,让我们确保没有人可以将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')
     }
   }
  }
}

扫码关注云+社区