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"))