Swift 3和UserDefaults

问题描述 投票:1回答:2

我有相当数量的代码看起来像这样......

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将始终返回一个值,如果它是Bool,我认为这是有意义的。好的,但解决这个问题的最佳方法是什么?我可以用objectForKey检查每个键,但这会使代码变得更加混乱。或者我根本无法进行此检查,并且确保每个键都在初始默认设置中,我猜。

我敢肯定,我不是唯一一个面对这个,任何规范解决方案的人吗?

swift3 nsuserdefaults
2个回答
2
投票

我担心你会认为这很麻烦,但你可以这样写:

let wantsIgnored = UserDefaults.standard.object(forKey: "ViewShowIgnoredElements") as? Bool ?? true

请试试。


0
投票

不应该是:

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"))
© www.soinside.com 2019 - 2024. All rights reserved.