【问题标题】:How to check bool inside of dictionary如何检查字典中的布尔值
【发布时间】:2015-06-17 10:31:02
【问题描述】:

我有以下代码:

struct Dare {
  var theDare: [[String: AnyObject]] = [
    ["dare": "Dare1",
     "darePerson": true],
    ["dare": "Dare2",
     "darePerson": false],
    ["dare": "Dare3",
     "darePerson": false],
    ["dare": "Dare4",
     "darePerson": true],
    ["dare": "Dare5",
     "darePerson": false]
]

func randomDare() -> Dictionary<String, AnyObject> {
    return theDare[Int(arc4random_uniform(UInt32(theDare.count)))]
}

}

如果darePerson == true,我如何检查随机胆量?

【问题讨论】:

  • 也许你应该考虑使用结构来封装你的数据——应该比字典的字典更容易使用。你想达到什么目的?

标签: arrays swift dictionary random


【解决方案1】:

从您的 randomDare 函数中,您将拥有一个 [String: AnyObject] 字典。

var dareDic: Dictionary<String, AnyObject> = randomDare()

然后您可以像这样将值转换为 Bool(使用 swift 1.2 if let where 语法):

if let darePerson = dareDic["darePerson"] as? Bool where darePerson == true {
   // Do something when true
}

这种技术避免了由于字典错误而导致的任何强制解包和解包选项失败

【讨论】:

    【解决方案2】:

    您的检查应该通过使用带有字符串参数的字典下标方法来完成,因为您的字典键是字符串。此外,由于您确定darePersons 存在于您的字典中并且其值为 Bool ,因此您可以强制解开它们

    if dare.randomDare()["darePerson"]! as! Bool{
      println("dare person is true")
    }
    

    【讨论】:

    • 显式 if let 选项的绑定会导致更安全的代码。强制展开更容易导致运行时崩溃。当我们不知道以后如何构建字典时,OP 为我们提供了一个字典示例
    • @TheTom 完全同意可选绑定。但是,如果 OP 示例稍后可能会改变,那么它应该朝着正确的方向改变,这就是 imo 是通过重建整个结构而不使用字典。我刚刚回答了 OP 正在寻找的内容
    猜你喜欢
    • 2017-10-10
    • 2019-04-27
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多