在Swift中可选,返回数组的数量

时间:2014-08-28 03:22:09

标签: swift

帮助我在Swift中选择地狱。如何返回键“R”的数组计数。 self.jsonObj可以为null

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
  return (self.jsonObj["R"]! as? NSArray)?.count;
}

3 个答案:

答案 0 :(得分:10)

让我们一步一步。

self.jsonObj可能是nil,因此您需要将其视为可选:

self.jsonObj?["R"]

如果nilself.jsonObj或者" R"则会返回1)nil不是有效的密钥,或者与" R"相关的值。是nil 2)某种类型的可选包装对象。换句话说,你有一个未知类型的可选。

下一步是找出它是NSArray

(self.jsonObj?["R"] as? NSArray)

由于上述原因或NSArray?,这将返回nil类型的可选项nil,因为self.jsonObj中的对象是其他对象类型。

现在您已经拥有了一个可选的NSArray,如果可以,请打开它并致电count

(self.jsonObj?["R"] as? NSArray)?.count

如果由于上述原因存在NSArray或返回nil,则会调用计数。换句话说,现在你有一个Int?

最后,如果此时nil(self.jsonObj?["R"] as? NSArray)?.count ?? 0,则可以使用 nil coalescing operator 返回值或零;

{{1}}

答案 1 :(得分:2)

如果数组中没有任何内容,我猜你会想要返回0。在这种情况下,请尝试Nil Coalescing Operator

return (self.jsonObj?["R"] as? NSArray)?.count ?? 0;

修改:@ vacawama的回答指出,如果self.jsonObj?["R"]self.jsonObj["R"]!,则应为self.jsonObj而不是nil

答案 2 :(得分:0)

假设self.jsonObjNSDictionary?Dictionary<String, AnyObject>?

return self.jsonObj?["R"]?.count ?? 0