@discardableResult | 忽略返回值(消除不用返回值的警告) |
static | 类型方法(引用类型class中,不可继承,不可与mutating组合) |
class | 类型方法(只能修饰引用类型class,可以继承,不可与mutating组合) |
mutating | 可以修改引用类型(struct/enum)内部值 |
在声明值类型的实例为不可变变量,即let时,是不可以修改任何它内部的变量值的
一种做法是声明成var,想怎么改,就怎么改。
另一种做法就是nonmutating,它告诉编译器不会修改实例内部的值,也就是set时,不会改变任何其他的变量
例:
struct Test2 {
var b: Int {
get {
return 2
}
nonmutating set {
print("\(newValue)")
}
}
}
let t = Test2()
t.b = 3
print(t.b)
和subscript组合应用:
protocol NSUserDefaultsSubscipt {
subscript(key: String) -> AnyObject? { get nonmutating set }
}
extension NSUserDefaults:NSUserDefaultsSubscipt {
subscript(key: String) -> AnyObject? {
get { return objectForKey(key) }
set { setObject(newValue, forKey: key) }
}
}
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults["key"] = "value"