IOS swift 如何在获取 Json 数据时检查空数组
IOS swift how can i check for empty array while getting Json data
我是 swift 的新手,在我的代码中,我从某封电子邮件中收到 JSON,JSON 数据首先放入 swift 中的数组中,但是,如果数组为空或没有 Json 数据,我会收到此错误
Could not cast value of type 'NSNull' (0x1067a5748) to 'NSArray' (0x1067a4c58).
我一直在尝试通过阅读 Check if optional array is empty 等其他帖子来解决此问题,但它不起作用。下面这段代码出现了问题
session.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {
print(error)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
if let musicJob = parsedData["music"] as! [AnyObject]? {
for S in musicjob {
if let genre = S["genre"] as? String {
self.genres.append(genre)
}
}
}
如果 Json 为空,我会在此处收到此行的错误
if let musicJob = parsedData["music"] as! [AnyObject]?
musicJob统计对象的数量,如“30个值或44个值”等。如果没有 Json 则它 returns nil 并且崩溃。 我是否可以捕获 nil 或空数组的值,以便应用程序不会崩溃?同样,只要 musicJob 数组不为空,一切正常。
试试这个:
if let musicJob = parsedData["music"] as? [AnyObject]
您可以像这样检查 nil
和空 Array
。
if let musicJob = parsedData["music"] as? [Any], !musicJob.isEmpty {
print(musicJob)
}
是的。您始终可以使用条件展开。 强制展开 通常是危险的(崩溃),应谨慎使用。
首先,使用 guard
确保在执行任何操作之前满足先决条件是一个很好的做法。
if guard let responseData = data else {
assertionFailure("response data is nil") // no need for assertionFailure is data is expected to be nil sometimes
return
}
还有与崩溃行类似的内容:
if let musicJob = parsedData["music"] as? [AnyObject] {
....
}
我是 swift 的新手,在我的代码中,我从某封电子邮件中收到 JSON,JSON 数据首先放入 swift 中的数组中,但是,如果数组为空或没有 Json 数据,我会收到此错误
Could not cast value of type 'NSNull' (0x1067a5748) to 'NSArray' (0x1067a4c58).
我一直在尝试通过阅读 Check if optional array is empty 等其他帖子来解决此问题,但它不起作用。下面这段代码出现了问题
session.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {
print(error)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
if let musicJob = parsedData["music"] as! [AnyObject]? {
for S in musicjob {
if let genre = S["genre"] as? String {
self.genres.append(genre)
}
}
}
如果 Json 为空,我会在此处收到此行的错误
if let musicJob = parsedData["music"] as! [AnyObject]?
musicJob统计对象的数量,如“30个值或44个值”等。如果没有 Json 则它 returns nil 并且崩溃。 我是否可以捕获 nil 或空数组的值,以便应用程序不会崩溃?同样,只要 musicJob 数组不为空,一切正常。
试试这个:
if let musicJob = parsedData["music"] as? [AnyObject]
您可以像这样检查 nil
和空 Array
。
if let musicJob = parsedData["music"] as? [Any], !musicJob.isEmpty {
print(musicJob)
}
是的。您始终可以使用条件展开。 强制展开 通常是危险的(崩溃),应谨慎使用。
首先,使用 guard
确保在执行任何操作之前满足先决条件是一个很好的做法。
if guard let responseData = data else {
assertionFailure("response data is nil") // no need for assertionFailure is data is expected to be nil sometimes
return
}
还有与崩溃行类似的内容:
if let musicJob = parsedData["music"] as? [AnyObject] {
....
}