值类型和引用类型

来源:互联网 发布:斑马条码打印机软件 编辑:程序博客网 时间:2024/06/05 04:34

值类型和引用类型

Swift 分为值类型和引用类型, 两者最典型的��分别的结构体和类.为阐明它们之间的区别, 看下面的粒子:

结构体

struct PointStruct {    var x: Int    var y: Int}var structPoint = PointStruct(x: 1, y: 2)var sameStructPoint = structPointsameStructPoint.x = 5func 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 = classPointsameStructPoint.x = 11func setClassToOrigin(point: PointClass) -> PointClass {    point.x = 0    point.y = 0    return point}var pointorign = setClassToOrigin(point: classPoint)

这段代码执行过后classPoint, pointorign和sameClassPoint的x值都被修改为0.

原创粉丝点击