我想获取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()
}
}
答案 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)
}