代码之家  ›  专栏  ›  技术社区  ›  Alper

uiimage不可变,但var

  •  0
  • Alper  · 技术社区  · 6 年前

    苹果的文件上说:

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

    但是斯威夫特很高兴让我宣布 var image 是的。唯一的问题是如果我给 image 它似乎什么也没做。对吗?我是不是被搞糊涂了?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sulthan    6 年前

    不可变类型和不可变变量之间存在差异:

    这是不可变类型:

    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 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
    

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

        2
  •  1
  •   Yun CHEN    6 年前

    图像对象是不可变的,但是图像指针。 var image:UIImage? 声明类似于 int *i; 用C语言。你可以改变指针,让它指向另一个图像对象。如果将新图像分配给 image 变量。