【问题标题】:How to get nested data from an API with Alamofire?如何使用 Alamofire 从 API 获取嵌套数据?
【发布时间】:2020-11-08 18:55:15
【问题描述】:

我正在使用 Swift 5、Alamofire 和 SwiftyJSON,但我还不知道如何实现它。

我的主要 API url 是 https://pokeapi.co/api/v2/pokemon?limit=151 并包含一个“结果”元素,该元素具有一个对象数组。这些对象是口袋妖怪,有名字和网址。

每个 pokemon 对象的 url 元素通向另一个端点,其中包含有关每个 pokemon 的更多信息。

这些端点是这样的:https://pokeapi.co/api/v2/pokemon/1/

每个口袋妖怪都有一个“能力”元素,它是一个由两个能力对象组成的数组。我需要这些数据,但不知道如何获得它。

编辑:这就是我的结构的样子

struct Pokemons: Codable {
    let results: [Pokes]?
}

struct Pokes: Codable {
    let name: String?
    let url: String?
}

struct PokePage: Codable {
    
    let abilities: [Ability]?
    let id: Int?
    
    init(abilities: [Ability], id: Int, name: String) {
        self.abilities = abilities
        self.id = id
    }
    
}

struct Ability: Codable {
    let name: String?
    let url: String?
    
    init(name: String, url: String) {
        self.name = name
        self.url = url
    }
}

【问题讨论】:

  • 如果您发布您的 JSON(以格式良好的方式),人们会很乐意为您提供适合您请求的对象结构。如今,没有人应该关注随机生成的 URL,而且大多数知识渊博的人都会避免这样做。

标签: swift parsing alamofire swift5 pokeapi


【解决方案1】:

您的问题与 Alamofire 或 SwiftyJSON 无关。这是一个架构问题。

一个基本而幼稚的解决方案:

  1. 获取您的第一个端点
  2. 根据results 构建您的口袋妖怪数组
  3. 然后为每个 Pokemon 获取关联的端点以获取其详细信息

此解决方案可能会引发性能问题。如果结果返回 10 000 个 Pokemon,您将在很短的时间内触发 10 001 个请求。

您应该考虑在真正需要时触发详细信息请求。

  • 如果口袋妖怪显示在列表中,则滚动
  • 要推送时的详细视图

【讨论】:

  • 现在它显示“应解码字符串,但找到了字典。”这是我的代码的捕获:gyazo.com/d254a637f5ff7e07502a8f9c15c14255
  • @3rnestocs 我认为您的可编码模型与 api 数据类型不匹配。发布一个链接,向我们展示您的模型/结构的外观 - 我相信我们能够更快地为您提供帮助。
  • 完成,我在帖子中添加了结构
猜你喜欢
  • 1970-01-01
  • 2017-09-12
  • 2019-12-08
  • 2018-09-09
  • 2022-09-24
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
相关资源
最近更新 更多