gpt4 book ai didi

ios - 终端获取URL后如何将数据传递到tableview? swift 5

转载 作者:行者123 更新时间:2023-11-29 05:12:52 24 4
gpt4 key购买 nike

import UIKit
import Alamofire
typealias JSON = [String: Any]

class NetworkingService {
static let shared = NetworkingService()
private init() {}

func getPeople(completion: () -> Void) {
AF.request(API.SpaceX.upcomingLaunches.url()).responseJSON{ (response) in

switch response.result {
case let .success(value):
print(value)
case let .failure(error):
print(error)
}
}
}
}

我已经从 api https://api.spacexdata.com/v3/launches/upcoming 获取了 JSON 数据在我的终端中。现在我想使用 swiftyJSON 或 Alamofire 解码数据并将其显示在我的表格 View 单元格上,但我无法做到。我想使用可编码的 alamofire 并且我已在下面给出的其他文件中编写了这些代码

    import Foundation

struct Mission: Codable {

let flight_number: Int
let mission_name: String
let launch_date_utc: String
let launch_date_local: String

struct Rocket: Codable {
let rocket_id: String
let rocket_name: String
let rocket_type: String
let first_stage: FirstStage
let second_stage: SecondStage
}

struct FirstStage: Codable {
let cores: [Core]
}

struct Core: Codable {
let core_serial: String?
let flight: Int?
let reused: Bool?
}

struct SecondStage: Codable {
let payloads: [Payload]
}

struct Payload: Codable {
let payload_id: String
let reused: Bool?
let customers: [String]
let payload_type: String?
}

struct LaunchSite: Codable {
let site_id: String
let site_name: String
let site_name_long: String
}

struct Links: Codable {
let mission_patch: String?
let presskit: String?
let article_link: String?
let video_link: String?
let reddit_campaign: String?
}

let rocket: Rocket
let launch_site: LaunchSite
let links: Links
}

上面是我的可编码数据。我想在我的 Tableview 单元格 中提供所有此类详细信息。你能帮我用 swiftyJSON 或 alamofire 重写代码吗? :)

import Foundation
struct API {
enum SpaceX {
case allLaunches
case pastLaunches
case upcomingLaunches
case latestLaunch
case nextLAunch

func url() -> String {
switch self {
case .allLaunches:
return "https://api.spacexdata.com/v3/launches"

case .pastLaunches:
return "https://api.spacexdata.com/v3/launches/past"

case .upcomingLaunches:
return "https://api.spacexdata.com/v3/launches/upcoming"


case .latestLaunch:
return "https://api.spacexdata.com/v3/launches/latest"

case .nextLAunch:
return "https://api.spacexdata.com/v3/launches/next"
}
}
}
}

上面是我制作的api函数。

最佳答案

在这里,首先您需要使用 JSONDecoder 将数据转换为自定义对象。为此,您需要像您已经做的那样使用Codable。这里也可以使用responseData代替responseJSON,比成功案例直接获取数据。

func getPeople(completion: () -> Void) {
AF.request(API.SpaceX.upcomingLaunches.url()).responseJSON{ (response) in
switch response.result {
case let .success(value):
print(value)
if let data = response.data {
// Convert to Object
do {
let responseDecoded = try JSONDecoder().decode([Mission].self, from: data)
print(responseDecoded.count)
} catch let error {
// Parser error
print(error)
}
}
case let .failure(error):
print(error)
}
}
}

希望这对您有所帮助。

关于ios - 终端获取URL后如何将数据传递到tableview? swift 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com