Swift nonmutating

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,854评论 0 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,869评论 1 10
  • 126.析构器 在一个类实例销毁前,一个析构器会立即调用。使用deinit 关键字来表示析构器, 跟构造器写法类似...
    无沣阅读 826评论 0 4
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 1,332评论 0 7
  • 我的岁月静好 因为你的负重前行 先生: 我知道你最近挺累的,也特别感谢你为了这个家的经济总是操心奔波和打算。当初...
    乡下妞阅读 251评论 0 2