为什么我无法获得NSArray的价值?总是返回nil值。Swift4.3

时间:2019-05-13 03:12:25

标签: swift nsarray

我想获取NSArray的值,但是它总是给我nil的值,有人知道如何解决吗?

它是由swift 4.2

创建的

KCNetWorkTool.tool.getRecordListWith(UserID: userID, Date: dateLabel.text!) { (result) in

            SVProgressHUD.dismiss()
            if let dict = result.data as NSDictionary? {
// the value of this below line, i cann't get . array always return nil
                if let array = (dict["list"] as? NSMutableArray) {
                    let countArray = array.count
                    for index in 0..<countArray {
                        if let dictNew = array[index] as? NSDictionary {
                            let row = EnvelopeModel(dictionary: dictNew)
                            self.recordModel.append(row)
                        }
                    }
                }
            }
            self.recordTable.reloadData()
        }
    }

2 个答案:

答案 0 :(得分:1)

大多数代码都是不必要的。通常,您不需要将数组和字典强制转换为Objective-C类型。所以你需要这样的东西:

KCNetWorkTool.tool.getRecordListWith(UserID: userID, Date: dateLabel.text!) { (result) in
    SVProgressHUD.dismiss()
    if let envelopes = result.data["list"] as? [[String: Any?]] {
        self.recordModel.append(envelopes.forEach { EnvelopeModel(dictionary: $0) })
    }
    self.recordTable.reloadData()
}

没有在编译器中检查过,但是类似的东西。

答案 1 :(得分:0)

实际上,您需要了解json复制的基本结构,并将json字符串传递到json格式化程序在线工具中,并且

检查从根密钥到结束密钥。尝试从结果中解包值。正确调试。

第二次机会是将直接数据转换为[String:Any]。您正在使用Alamofire或其他库使用的哪种Api调用工具。

您可以使用JsonDecoder类将数据转换为模型类,这是iOS中的nativ工具。

将json转换为结构,并使用根结构将数据解析为整个模型结构化数据。

struct Root<T> : Codable
{
    var yourRootKey: T?
}

struct Price : Codable
{
    var yoursubKey: Double?
}

Pass in decoder like Root<Price>.self

do{
   let response = try JsonDecoder().decode(Root<Price>.self, for : result.data)
}catch let error{
   print(error.localizedDescription)
}