【发布时间】:2019-12-29 03:43:42
【问题描述】:
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 解码数据并将其显示在我的 tableview 单元格上,但我无法做到。我想使用可编码的 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 cell 中提供所有这些细节。你能帮我用 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 func。
【问题讨论】:
-
如果你使用
Codable结构那么你不需要SwiftyJson。您可以对来自 api 请求的数据使用 json 解码器。 -
@Paulw11 感谢您提供的信息,但如何编写 json 解码器?我看过 Alamofire 文档,但自从我学到了新知识后,我面临着一些困惑。你能帮我写代码吗?
标签: ios json swift xcode swift5