UIImage不可变但可变

时间:2018-07-16 09:06:18

标签: ios swift uiimage

Apple文档说:

  

由于图像对象是不可变的,因此创建后就无法更改其属性。

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

2 个答案:

答案 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变量,就会发生这种情况。