【问题标题】:Issue getting count of records in JSON array using Alamofire | Swift 5使用 Alamofire 获取 JSON 数组中的记录数的问题 |斯威夫特 5
【发布时间】:2021-02-09 07:48:58
【问题描述】:

基本上我有以下功能:

func stagedCount() {
         let url = "example.com"
         let parameters: Parameters =
         ["person": "\(name)"]
         Alamofire.request(url, method: .post, parameters: parameters).responseData(completionHandler : { response in
             if let allObjects = response.result.value as? NSArray{
              print("Array length is \(allObjects.count)")
         }
     }
 )}

来自 URL 的 JSON 响应如下所示:

[
  {
    "person": "Jake",
    "hobby": "soccer"
  },
  {
    "person": "Mary",
    "hobby": "surfing"
  }
]

我收到以下响应,目前没有打印任何计数。

从“数据?”投射到不相关的类型 'NSArray' 总是失败

如何解决此问题以获取数组中记录的数量?我正在寻找的结果是 2

【问题讨论】:

    标签: arrays json swift alamofire


    【解决方案1】:

    错误很明显。 responseData 将返回一个 JSON 字符串数据。您不能将数据转换为数组。您需要将 json 数据解码为人员结构数组:

    struct Person {
        let person: String
        let hobby: String
    }
    

    解码响应时:

    guard 
       let data = response.data, 
       let json = String(data: data, encoding: .utf8) 
    else { return }
    print("json:", json)
    do {
        let people = try JSONDecoder().decode([Person].self, from: data)
        print(people.count)
        for person in people {
            print(person)
        }
    } catch { 
        print(error) 
    }            
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多