Swift nonmutating

作者: 微微笑的蜗牛 | 来源:发表于2016-05-13 21:53 被阅读167次

    nonmutating关键字,一般配合set使用。如

    protocol Settings {
        subscript(key: String) -> AnyObject? { get nonmutating set }
    }
    
    

    为什么要用nonmutating

    在声明值类型的实例为不可变变量,即let时,是不可以修改任何它内部的变量值的。

    QQ20160513-2@2x.png

    解决方法:
    一种做法是声明成var,想怎么改,就怎么改。

    另一种做法就是nonmutating,它告诉编译器不会修改实例内部的值,也就是set时,不会改变任何其他的变量。

    struct Test2 {
        
        var b: Int {
            get {
                return  2
            }
            nonmutating set {
                print("\(newValue)")
            }
        }
    }
    
    let t = Test2()
    t.b = 3
    print(t.b)
    
    

    为什么要强调值类型

    引用类型指class。因为在引用类型中,没有这种限制。无论你将实例声明为var或者let,都是可以修改的。

    参考:The why of nonmutating

    相关文章

      网友评论

        本文标题:Swift nonmutating

        本文链接:https://www.haomeiwen.com/subject/qajmrttx.html