值类型和引用类型
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.