值类型和引用类型
Swift 分为值类型和引用类型, 两者最典型的��分别的结构体和类.为阐明它们之间的区别, 看下面的粒子:
结构体
struct PointStruct { var x: Int var y: Int } var structPoint = PointStruct(x: 1, y: 2) var sameStructPoint = structPoint sameStructPoint.x = 5 func setStructToOrigin( point: PointStruct) -> PointStruct { var point1 = point point1.x = 0 point1.y = 0 return point1 } var structOrign = setStructToOrigin(point: structPoint)
此段代码执行完后, sameStructPoint等于(x: 5, y: 2), structOrign等于(x:0, y:0).然而structPoint仍然保持原始值不变.值类型被赋予一新值或当做惨书传递时, 会发生值得赋值.
let structPoint2 = PointStruct(x: 10, y: 10) //这段代码会报错 structPoint2.x = 1 苹果官方解释 If you create an instance of a structure and assign that instance to a constant, you cannot modify the instance’s properties, even if they were declared as variable properties
类
class PointClass { var x: Int var y: Int init(x: Int, y: Int) { self.x = x self.y = y } } var classPoint = PointClass(x: 10, y: 10) var sameClassPoint = classPoint sameStructPoint.x = 11 func setClassToOrigin(point: PointClass) -> PointClass { point.x = 0 point.y = 0 return point } var pointorign = setClassToOrigin(point: classPoint)
这段代码执行过后classPoint, pointorign和sameClassPoint的x值都被修改为0.