【发布时间】:2018-01-06 19:21:29
【问题描述】:
我正在使用 Xcode 9.2 和 Swift 4。如何检查返回的 json 数据是否为空?
现在它在if json[0]["data"] 行给了我错误Type 'Any' has no subscript members
var json: NSMutableArray = []
var newsArray: NSMutableArray = []
let url = URLFactory()
var data = try! NSData(contentsOf: url.getURL()) as Data
do {
json = try JSONSerialization.jsonObject(with: data, options: []) as! NSMutableArray
if json[0]["data"] {
// data is not null
}
} catch let error as NSError {
// handle error
}
我的 JSON 返回如下内容:
{
"data":
[
{
"news_id":123,
"title":"title",
"news_date":"2017-02-08 21:46:06",
"news_url":"url",
"short_description":"description",
"category_id":4,
"category_name":"Health",
"latlng":
[
{
"lat":"43.003429",
"lng":"-78.696335"
}
]
}
{ ....
}
【问题讨论】:
-
不要在 Swift 中使用
NS[Mutable]Array或NS[Mutable]Dictionary。使用原生集合类型。 -
请阅读 JSON。这很容易。只有两种集合类型:
{}是字典,[]是数组。根对象显然是一个字典 ([String:Any])。并且 has no subscript members 发生错误,因为在 Swift 3+ 中,编译器必须知道任何下标集合类型的静态类型。 -
不要使用 任何 类型的
NS类型,包括NSData、NSError等。