我想用settar和getter做下面的事情:
你能简单地写吗?
// Error code
class Person : NSObject {
let personId : String
init(personId: String) {
self.personId = personId
}
public var name : String? {
// The key is not static. It is decided dynamically.
let keyName = "name-" + self.personId
get {
// If `name` exists, return it.
if name != nil { return name }
// Else load from `UserDefaults`
return UserDefaults.standard.string(forKey: keyName)
}
set {
name = UserDefaults.standard.set(newValue, forKey: keyName)
}
}
}
您不能仅使用变量来实现您要的内容,因为computed properties
实例中没有任何存储空间。因此,您必须引入一个私有变量来保存值in memory
:
class Person : NSObject {
public let personId : String
private var _name: String?
init(personId: String) {
self.personId = personId
}
public var name : String? {
get {
let keyName = "name-" + self.personId
return _name != nil ? _name : UserDefaults.standard.string(forKey: keyName)
}
set {
let keyName = "name-" + self.personId
UserDefaults.standard.set(newValue, forKey: keyName)
_name = newValue
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句