在 Swift 中获取列表的第一项 [关闭]
Posted
技术标签:
【中文标题】在 Swift 中获取列表的第一项 [关闭]【英文标题】:Take the first item of a list in Swift [closed] 【发布时间】:2020-12-15 18:12:52 【问题描述】:我正在按照教程使用 Swift 进行 API 调用,但我只需要获取检索到的数组的第一项。所以,我的问题是:“选择 JSON 对象数组/字典的第一个元素的最佳方法是什么?”。
我正在尝试几种方法,但它们在隧道尽头没有亮光。
这是示例代码。
PokemonAPIList.swift
import Foundation
struct PokemonAPIList: Decodable
var results: [PokemonListEntry]
struct PokemonListEntry: Decodable
var name: String
var url: String
PokemonNetworkManager.swift
import Foundation
import SwiftUI
import Combine
class PokemonNetworkManager: ObservableObject
@Published var results = [PokemonListEntry]()
init()
guard let url = URL(string: "https://pokeapi.co/api/v2/pokemon?limit=151") else return
URLSession.shared.dataTask(with: url) (data, _, _) in
guard let data = data else return
let pokemonList = try! JSONDecoder().decode(PokemonAPIList.self, from: data)
DispatchQueue.main.async
self.results = pokemonList.results
.resume()
ContentView.swift
import SwiftUI
struct ContentView: View
@ObservedObject var networkingManager = PokemonNetworkManager()
var body: some View
let bulbasaur = networkingManager.results.first
Text(bulbasaur!.name) //Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
.bold()
/*THIS CODE BELOW WORKS
List(networkingManager.results, id:\.name) pokemon in
Text(pokemon.name)
*/
#if DEBUG
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
#endif
【问题讨论】:
要获得有关 Stack Overflow 代码的帮助,您需要实际共享代码本身:请参阅 minimal reproducible example。你说你得到了错误,但你没有说它们是什么,我们无法读懂你的想法。 【参考方案1】:我不知道你到底想要什么,但如果你需要返回对象数组的第一个元素,你可以这样做:
array.first()
如果没有,请提供完整的代码以帮助您
【讨论】:
它返回以下错误:线程 1:致命错误:在展开可选值时意外发现 nil 查看修改后的代码 所以要么数组是 nil,要么是它的第一个元素。 但如果我将数组放入 List 中,代码会运行并显示所有 151 个口袋妖怪 试试if let first = array.first ...
。以上是关于在 Swift 中获取列表的第一项 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章