我的Swift项目中有一个设置服务,它定义了我的应用程序中可用的所有设置的变量。为了仅在绝对必要时访问NSUserDefaults(为了避免非必要的延迟),我使用缓存变量进行这些设置:
class SettingsService {
struct UserDefaults {
static let Setting1 = "Setting1"
}
private var setting1Cache : Bool?
var setting1 : Bool {
get {
if let value = setting1Cache {
return value
}
let value = NSUserDefaults.standardUserDefaults().boolForKey(UserDefaults.Setting1)
setting1Cache = value
return value
}
set {
setting1Cache = newValue
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: UserDefaults.Setting1)
}
}
}
尽管代码应该有效,但是当可用设置数量增加时,类很快就会变得非常臃肿。除了为getter的前4行定义一个辅助函数之外,还有什么方法可以使代码更加简洁明了吗?
答案 0 :(得分:1)
你应该为此使用枚举,唯一的缺点是它只定义了AnyObject
。如果可以定义枚举中存储值的自定义getter,则可能是......
enum Userdefaults {
case Setting1, Setting2
var key: String {
switch self {
case .Setting1: return "setting1key"
case .Setting2: return "setting2key"
}
var value: AnyObject {
switch self {
case .Setting1: return NSUserDefaults.standardUserDefaults().boolForKey(key)
case .Setting2: return NSUserDefaults.standardUserDefaults().stringForKey(key)
}
}