【发布时间】:2021-07-12 12:19:21
【问题描述】:
我正在尝试在我的 Swift 项目中进行 API 调用,但是当我运行代码时,程序无法通过
if let decodedJson = try? JSONDecoder().decode(JSONStructure.self, from: data) {
我添加了一些打印语句来澄清我的问题。
我在运行代码时也没有收到任何错误,但我猜那是因为我没有任何 catch 语句。但即使我补充说我仍然没有收到任何错误。我不知道这是否与我的问题有关,但我尝试使用 try! 而不是 try?,然后出现此错误:Initializer for conditional binding must have Optional type, not 'JSONStructure'。
这是我的 API 调用函数:
public func FetchTrip() {
print("Level 1") //This prints
Trips.removeAll()
let tripKey = "40892db48b394d3a86b2439f9f3800fd"
let tripUrl = URL(string: "http://api.sl.se/api2/TravelplannerV3_1/trip.json?key=\(tripKey)&originExtId=\(self.origin.iD)&destExtId=\(self.dest.iD)&Date=\(self.travelDate)&Time=\(self.arrivalTime)&searchForArrival=\(self.searchForArrival)")
URLSession.shared.dataTask(with: tripUrl!) {data, response, error in
print("Level 2") //This prints
if let data = data {
print("Level 3") //This prints
do {
if let decodedJson = try? JSONDecoder().decode(JSONStructure.self, from: data) {
print("Level 4") //This does not print
// My logic here
}
}.resume()
这是我用来访问 JSON 文件的结构:
struct JSONStructure: Decodable {
var Trip: [TripStructure]
}
struct TripStructure: Decodable {
var LegList: LegListStructure
}
struct LegListStructure: Decodable {
var Leg: [LegStructure]
}
struct LegStructure: Decodable {
var Origin: StationStructure
var Destination: StationStructure
var Product: ProductStructure
var name: String
var type: String
var dist: String
}
struct StationStructure: Decodable {
var time: String
var name: String
var date: String
}
struct ProductStructure: Decodable {
var catIn: String
}
如果您想亲自查看JSON 文件,可以使用this URL
【问题讨论】:
标签: json swift xcode api try-catch