Apple文档说:
由于图像对象是不可变的,因此创建后就无法更改其属性。
但是Swift高兴地让我声明了var image
。唯一的问题是,如果我为image
分配了新图像,则似乎什么也没做。那是对的吗?我只是在这里感到困惑吗?
答案 0 :(得分:2)
不可变类型和不可变变量之间存在区别:
这是一个不可变的类型:
a
如您所见,var immutable = Immutable(a: 10)
immutable.a = 10 // error, cannot change value of constant
属性只能在初始化期间设置,因此:
immutable = Immutable(a: 20)
但是,我们可以更改变量本身的值:
Immutable
现在将指向 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
即使变量本身是常量,我们也可以更改值。
这种区别对于值类型更为重要,因为变量的可变性变成了类型的可变性。
@php
$class = $errors->has('name') ? ' is-invalid' : '' ;
@endphp
{!! Form::text('name', null, ['class' => 'form-control'. $class] ) !!}
基本上,对值类型的任何更改都是对变量本身的新赋值,因此它必须是可变的。
答案 1 :(得分:1)
图像对象是不可变的,但是图像指针。 var image:UIImage?
用C语言声明一个类似int *i;
的UIImage类型指针。您可以更改指针,使其指向另一个图像对象。如果将新图像分配给image
变量,就会发生这种情况。