2016-12-01 61 views
1

所以我在我的主应用程序(objective-c)中保存一个布尔值为userdefaults,然后在swift扩展中读取值(通过组)。如果我读的价值就像下面它的工作原理:Swift和objective-C userdefault布尔问题

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

但如果我读它像以下这将永远是假的:

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

我会想象,迅速和Objective-C布尔是完全兼容,但这使我们想知道我是否误解了某些东西?

此外,工作的解决方案只是太多的代码行。如果这是唯一的解决方案,我宁愿只是使用一个对象,并使用它。

回答

1

我没有真正的答案。但是,你可以做同样的一条线:

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

由于某种原因,它现在可以工作,它可以真的flunky键盘扩展和调试工作,但这个宝石仍然不错:)。谢谢 – Warpzit

1

bool(forKey defaultName: String)总是给人一种Bool,否则返回值(true或false)如果钥匙被发现,和虚假的。所以是的,在我看来,将Bool存储为对象来区分不存在密钥和虚假值可能是优选的。