Swift和objective-C userdefault布尔问题

时间:2016-12-01 09:49:05

标签: objective-c swift

所以我在我的主应用程序(objective-c)中将一个布尔值保存到userdefaults然后我在swift扩展中读取值(通过组)。如果我读取下面的值就可以了:

    if let isKey = userDefaults.object(forKey: Constants.GroupShares.isKey) as? Bool {
        if !isKey {
            // awesome
        }
    }

但是,如果我像下面这样阅读它将永远是假的:

let isKey = userDefaults.bool(forKey: Constants.GroupShares.isKey)

我认为快速和客观的布尔是完全兼容的,但这让我们想知道我是否误解了什么?

同样可行的解决方案就是代码行太多了。如果这是唯一的解决方案,我宁愿简单地使用一个对象并使用它。

2 个答案:

答案 0 :(得分:1)

我没有真正的答案。但你可以在一行中做同样的事情:

let isKey = (userDefaults.object(forKey: Constants.GroupShares.isKey) as? Bool) ?? false

答案 1 :(得分:1)

bool(forKey defaultName: String)总是提供Bool,如果找到密钥则返回值(true或false),否则返回false。所以是的,在我看来,可能最好将Bool存储为一个对象,以区分缺少密钥和假值。