【问题标题】:IOS swift how can i check for empty array while getting Json dataIOS swift如何在获取Json数据时检查空数组
【发布时间】:2016-11-23 04:43:18
【问题描述】:

我对 swift 非常陌生,在我的代码中,我从某封电子邮件中获取 JSON,JSON 数据首先被放入 swift 的数组中,但是如果数组为空或没有 Json 数据,我会收到此错误

无法将“NSNull”(0x1067a5748)类型的值转换为“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 为 null,我会在此处收到此行的错误

if let musicJob = parsedData["music"] as! [AnyObject]?

musicJob 统计对象的数量,例如“30 个值或 44 个值”等。如果没有 Json 则返回 nil 并崩溃。 我是否可以捕获 nil 或空数组的值,以使应用程序不会崩溃?只要 musicJob 数组不为空,一切正常。

【问题讨论】:

  • 想一想强制将可选项展开为可选项 (as! [AnyObject]?) 的含义。除此之外,Swift 3 中未指定的 JSON 类型始终为 Any 而不是 AnyObject

标签: ios arrays swift swift3 anyobject


【解决方案1】:

试试这个:

if let musicJob = parsedData["music"] as? [AnyObject]

【讨论】:

    【解决方案2】:

    您可以像这样检查nil 和空Array

    if let musicJob = parsedData["music"] as? [Any], !musicJob.isEmpty {
        print(musicJob)
    }
    

    【讨论】:

      【解决方案3】:

      是的。您始终可以使用条件展开。 强制展开通常是危险的(崩溃),应该非常小心地使用。

      首先,在执行任何操作之前使用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] {
          ....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        相关资源
        最近更新 更多