UIImage 不可变但 var

UIImage immutable but var

Apple 文档说:

Because image objects are immutable, you cannot change their properties after creation.

但是 Swift 高兴地让我声明一个 var image。唯一的问题是,如果我将新图像分配给 image,它似乎什么也没做。那是对的吗?我只是在这里感到困惑吗?

图像对象是不可变的,但图像指针。 var image:UIImage?像C语言中的int *i;一样声明了一个UIImage类型的指针。你可以改变指针,让它指向另一个图像对象。如果您将新图像分配给 image 变量,就会发生这种情况。

不可变类型和不可变变量的区别:

这是一个不可变类型:

class Immutable {
   let a: Int

   init(a: Int) {
     self.a = a
   }
}

如您所见,属性 a只能在初始化时设置,因此:

var immutable = Immutable(a: 10)
immutable.a = 10 // error, cannot change value of constant

但是,我们可以改变变量本身的值:

immutable = Immutable(a: 20)

现在将指向 Immutable class 的另一个实例。

如果我们有一个可变类型:

 class Mutable {
   var a: Int

   init(a: Int) {
     self.a = a
   }
}

然后:

let mutable = Mutable(a: 10)
mutable.a = 10

即使变量本身是常量,我们也可以更改值。

这种区别对于值类型更为重要,因为变量的可变性成为类型的可变性。

struct MutableValueType {
   var a:
}

let immutable = MutableValueType(a: 10)
immutable.a = 20 // error

var mutable = MutableValueType(a: 10)
mutable.a = 20

基本上,对值类型的任何更改都是对变量本身的新赋值,因此它必须是可变的。