在Swift中幫助我選擇地獄。如何返回鍵「R」的數組數量。 self.jsonObj
可以爲空在Swift中可選,返回數組的數量
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return (self.jsonObj["R"]! as? NSArray)?.count;
}
在Swift中幫助我選擇地獄。如何返回鍵「R」的數組數量。 self.jsonObj
可以爲空在Swift中可選,返回數組的數量
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return (self.jsonObj["R"]! as? NSArray)?.count;
}
讓我們在這一次一步。
self.jsonObj
可能nil
,所以你需要把它當作一個可選:
self.jsonObj?["R"]
,這樣就會將返回1)nil
如果self.jsonObj
是nil
或者「R」是不是一個有效的密鑰,或者與「R」關聯的值是nil
2)某種類型的可選包裝對象。換句話說,你有一個可選的某種未知類型。
下一步是找出它是否是一個NSArray
:
(self.jsonObj?["R"] as? NSArray)
這將返回一個可選NSArray?
類型可能是nil
針對上述原因或nil
因爲self.jsonObj
的目標是一些其他的對象類型。
所以,現在你有一個可選的NSArray,解開它,如果你能,並呼籲count
:
(self.jsonObj?["R"] as? NSArray)?.count
這將調用數,如果有一個NSArray
或因上述原因而返回零。換句話說,現在你有一個Int?
最後,你可以使用零合併運算如果你有nil
在這一點上返回值或零:
(self.jsonObj?["R"] as? NSArray)?.count ?? 0
好的答案,但也是一個很好的例子,你應該把你的JSON解析爲真正的Swift數據類型,而不是將其存儲爲'[String:AnyObject]'。不斷檢查你的元素是否是你期望的類型是麻煩且容易出錯的。當數據顯示時做一次。 – 2014-08-28 12:55:06
爲什麼這不起作用? 'NSLog(「%@」,(self.jsonObj?[「R」]!as?NSArray)?)' – 2014-08-28 19:36:24
也'(self.jsonObj?[「R」] as?NSArray)?[0] .count + (self.jsonObj?[「R」] as?NSArray)?[1] .count ?? 0'無法編譯 – 2014-08-28 19:44:30
我猜你會想返回0
如果沒有什麼在數組中。在這種情況下,嘗試Nil Coalescing Operator:
return (self.jsonObj?["R"] as? NSArray)?.count ?? 0;
編輯:作爲@ vacawama的回答指出,應該self.jsonObj?["R"]
,而不是self.jsonObj["R"]!
萬一self.jsonObj
是nil
。
我得到'unexpedly found nil' – 2014-08-28 11:31:25
'return(self.jsonObj?[「R」]!as?NSArray)?。 0;'作品 – 2014-08-28 11:59:47
請記住,'!'應該發音爲「我發誓我的節目的生活。」所以你必須在這裏絕對肯定的是,如果存在'jsonObj',那麼'R'值就不可能丟失(並且很難保證JSON,因爲你通常從程序外部獲取它)。在這種情況下,@ vacawama的解決方案避免了崩潰。 – 2014-08-28 12:58:42
假設self.jsonObj
是NSDictionary?
或Dictionary<String, AnyObject>?
return self.jsonObj?["R"]?.count ?? 0
我不相信這會編譯,因爲'AnyObject'上沒有'count'。 – 2014-08-28 13:00:46
@RobNapier「你也可以調用任何Objective-C方法並訪問任何屬性,而不用轉換成更具體的類類型。」[doc](https://developer.apple.com/library/prerelease/mac/documentation/) Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html) – 2014-08-28 21:45:40
謝謝;這是有道理的,因爲'AnyObject'基本上轉換爲'id'。這意味着如果這個元素是某種東西,但不是'NSArray',它會崩潰,對吧? – 2014-08-29 11:19:27
雨燕語言應該很容易不是嗎? – 2014-08-28 04:49:12
應該是,除非我知道它很好 – 2014-08-28 11:32:05