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
基本上,对值类型的任何更改都是对变量本身的新赋值,因此它必须是可变的。
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
基本上,对值类型的任何更改都是对变量本身的新赋值,因此它必须是可变的。