【问题标题】:Checking key in JSONObject Swift在 JSONObject Swift 中检查密钥
【发布时间】:2017-03-17 03:57:06
【问题描述】:

我是 Swift 的新手。如何检查 JSONObject 中的密钥是否存在?在 Java 中,我可以做到这一点 jsonObject.has("selected") 。在我的代码下面:

currTable = filteredDataTable[indexPath.row] as! [AnyHashable: Any]

if ((currTable.index(forKey: "selected") != nil) /*currTable["selected"]) != nil*/) {
          currTable.updateValue((!((currTable["selected"] as? Bool)!)), forKey: "selected")
}
else {
          currTable.updateValue(true, forKey: "selected")
}
print(currTable)

在我上面的代码中,当我单击我的 CollectionView 单元格时,它总是给我else 条件。所以我的 JSONObject 中的 selected 键总是正确的。我犯错了吗?我已阅读this,但并不清楚我的所有问题。

【问题讨论】:

  • 看起来好像 currTable 字典没有名为“selected”的键。您是否在 if 条件上设置了断点并检查以查看您的数据是什么样的以及为什么未设置密钥?可能是您没有使用“选定”的值进行初始化,或者您的条件应该是 == nil?
  • 你尝试使用“expr(bool) ? expr : expr”还是“if let/guard let”?
  • @Fahim 绝对正确。 currTable 永远不会有 selected 键。所以我想把它放出来并给出价值。但它似乎不起作用
  • @Evsenev 不,我还没有尝试过。我会读到guard 对不起我的英语不好
  • @MarioMargoPradipta 好的,然后,反转您的条件 - 如果您开始时没有“选定”键,则查找 == nil 并在选择一行时将选定键的值设置为 true .因为你一开始没有选择任何东西(至少我认为你这样做了),所以设置“selected”应该引入字典的键。希望这是有道理的?

标签: json swift


【解决方案1】:

试试这个:

currTable = filteredDataTable[indexPath.row] as! [AnyObject: Any]

if let selectedTableElement = currTable["selected"] != nil {
    currTable.updateValue(false, forKey: "selected") 
}
else {
    currTable.updateValue(true, forKey: "selected")
}
print(currTable)

【讨论】:

  • 什么是selectedTableElement?
  • 只是一个在条件中检查 nil 的常数,但它不会改变您的功能中的任何内容。
  • 可以使用_ 代替未使用的术语。 Anw,`if let _ = currTable["selected"] { } 我认为就足够了
  • 你是怎么读到的?如果 selectedTableElement 与具有选定键的 currTable 相同存在?之前谢谢,但我认为这对我不起作用
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多