Swift 3 和用户默认值
Swift 3 and UserDefaults
我有相当多的代码看起来像这样...
let wantsIgnored = UserDefaults.standard.bool(forKey: "ViewShowIgnoredElements") ?? true
我们的想法是,如果默认值不包含该键,它仍会获得合理的默认值。这在 Swift 2 中工作正常,但在 Swift 3 中它警告...
Left side of nil coalescing operator '??' has non-optional type 'Double', so the right side is never used
所以 UserDefaults.standard.bool
似乎 总是 return 一个值,如果它是 Bool,我想这是有道理的。好的,但是解决此问题的最佳方法是什么?我可以用 objectForKey
检查每个键,但这会使代码更加混乱。或者我根本无法进行此检查,并确保每个键都在初始默认设置中,我猜是手工操作。
我确定我不是唯一遇到过这种情况的人,有什么规范的解决方案吗?
恐怕你会认为这凌乱,但你可以这样写:
let wantsIgnored = UserDefaults.standard.object(forKey: "ViewShowIgnoredElements") as? Bool ?? true
请尝试。
不应该是:
let wantsIgnored = UserDefaults.standard.set(true, forKey: "ViewShowIgnoredElements")
然后更改它:
UserDefaults.standard.set(false, forKey: "ViewShowIgnoredElements")
并调用它:
let xxxx = UserDefaults.standard.bool(forKey: "ViewShowIgnoredElements")
或:
func boolTest (_myBool: Bool){
if _myBool{
//do something
}
}
//and call that function
boolTest(_myBool: UserDefault.standard.bool(forKey: "ViewShowIgnoredElements"))
我有相当多的代码看起来像这样...
let wantsIgnored = UserDefaults.standard.bool(forKey: "ViewShowIgnoredElements") ?? true
我们的想法是,如果默认值不包含该键,它仍会获得合理的默认值。这在 Swift 2 中工作正常,但在 Swift 3 中它警告...
Left side of nil coalescing operator '??' has non-optional type 'Double', so the right side is never used
所以 UserDefaults.standard.bool
似乎 总是 return 一个值,如果它是 Bool,我想这是有道理的。好的,但是解决此问题的最佳方法是什么?我可以用 objectForKey
检查每个键,但这会使代码更加混乱。或者我根本无法进行此检查,并确保每个键都在初始默认设置中,我猜是手工操作。
我确定我不是唯一遇到过这种情况的人,有什么规范的解决方案吗?
恐怕你会认为这凌乱,但你可以这样写:
let wantsIgnored = UserDefaults.standard.object(forKey: "ViewShowIgnoredElements") as? Bool ?? true
请尝试。
不应该是:
let wantsIgnored = UserDefaults.standard.set(true, forKey: "ViewShowIgnoredElements")
然后更改它:
UserDefaults.standard.set(false, forKey: "ViewShowIgnoredElements")
并调用它:
let xxxx = UserDefaults.standard.bool(forKey: "ViewShowIgnoredElements")
或:
func boolTest (_myBool: Bool){
if _myBool{
//do something
}
}
//and call that function
boolTest(_myBool: UserDefault.standard.bool(forKey: "ViewShowIgnoredElements"))