我有以下情况:
if UserDefaults.standard.bool(forKey: "foo") == nil {
asyncRequest() { foo in
myMethod(foo)
}
} else {
myMethod(foo)
}
我基本上都在检查此时是否缓存了foo
变量。如果不是,我从服务器上获取它,但是如果我有它,我会直接调用该方法。
是否有更好的做法可以避免在这里使用if-else语句? (例如,允许我仅拨打myMethod(foo)
一次的内容)
答案 0 :(得分:0)
这似乎是对的,请注意bool(forKey :)将始终返回bool,而不是可选。为此你应该使用value(forKey :)。你也可以做这样的事情
var foo: Bool? {
return UserDefaults.standard.value(forKey: "foo") as? Bool
}
func assignValue() {
guard let foo = foo else {
// your async call here
return
}
myMethod(foo)
}
答案 1 :(得分:0)
let group = DispatchGroup()
if UserDefaults.standard.bool(forKey: "foo") == nil {
group.enter()
asyncRequest() { foo in
UserDefaults.standard.set(bool: foo, forKey: "foo")
group.leave()
}
}
group.notify(queue: .main) {
let foo = UserDefaults.standard.set(bool: foo, forKey: "foo")
myMethod(foo)
}
这个想法是在两种情况下都会触发group.notify()
。