nonmutating關(guān)鍵字锥腻,一般配合set使用嘱函。如
protocol Settings {
subscript(key: String) -> AnyObject? { get nonmutating set }
}
為什么要用nonmutating
在聲明值類型的實(shí)例為不可變變量蓉驹,即let時(shí)曹宴,是不可以修改任何它內(nèi)部的變量值的搂橙。
解決方法:
一種做法是聲明成var,想怎么改笛坦,就怎么改区转。
另一種做法就是nonmutating,它告訴編譯器不會(huì)修改實(shí)例內(nèi)部的值版扩,也就是set時(shí)废离,不會(huì)改變?nèi)魏纹渌淖兞俊?/p>
struct Test2 {
var b: Int {
get {
return 2
}
nonmutating set {
print("\(newValue)")
}
}
}
let t = Test2()
t.b = 3
print(t.b)
為什么要強(qiáng)調(diào)值類型
引用類型指class。因?yàn)樵谝妙愋椭薪嘎瑳]有這種限制蜻韭。無論你將實(shí)例聲明為var或者let挣郭,都是可以修改的殊鞭。