這是我要遵循的指南:https ://www.youtube.com/watch?v=MBCX1atOvdA&t=878s
這是我的代碼(與他的完全相同):
import SwiftUI
struct Response: Codable {
var results: [Result]
}
struct Result: Codable {
var trackId: Int
var trackName: String
var collectionName: String
}
struct ContentView: View {
@State private var results = [Result]()
var body: some View {
List(results, id: \.trackId) { item in
VStack(alignment: .leading) {
Text(item.trackName)
.font(.headline)
Text(item.collectionName)
}
}.task {
await loadData()
}
}
func loadData() async {
guard let url = URL(string: "https://itunes.apple.com/search?term=taylor swift&entity") else {
print("Invalid URL")
return
}
do {
let (data, _) = try await URLSession.shared.data(from: url)
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
results = decodedResponse.results
}
} catch {
print("Invalid data")
}
}
}
問題是我收到此錯誤:
843380-0500 pulldata[46561:4433324] 連接 1:收到失敗通知 2022-01-19 21:34:45.844386-0500 pulldata[46561:4433324] 連接 1:連接失敗 10:-72000,原因 -1 2022-01 -19 21:34:45.844448-0500 pulldata[46561:4433324] 連接 1:遇到錯誤(10:-72000)2022-01-19 21:34:45.845461-0500 pulldata[46561:4433327] 任務 <3E5E1143-19D2- 4141-B5CE-F646B32F892F>.<1> HTTP 加載失敗,0/0 位元組(錯誤代碼:-1003 [10:-72000])2022-01-19 21:34:45.846729-0500 pulldata[46561:4433327] 任務<3E5E1143-19D2-4141-B5CE-F646B32F892F>.<1> 以錯誤結束 [-1003] 錯誤域 = NSURLErrorDomain 代碼 = -1003 “找不到具有指定主機名的服務器。” UserInfo={_kCFStreamErrorCodeKey=-72000, NSUnderlyingError=0x6000024aff90 {錯誤域=kCFErrorDomainCFNetwork 代碼=-1003 "(null)"
是的,我知道該網站不再存在,但代碼不適用于任何網站,我覺得這與這部分錯誤有關
沙盒不允許訪問 com.apple.dnssd.service
任何其他向我展示如何使用 swift 從網站獲取資料的視頻,或對本指南的任何幫助,將不勝感激!
uj5u.com熱心網友回復:
使用可選選項嘗試這樣的事情,對我有用:
import SwiftUI
struct Response: Codable {
let results: [Result]
}
struct Result: Codable {
var trackId: Int? // <--- here optional
var trackName: String? // <--- here optional
var collectionName: String? // <--- here optional
}
struct ContentView: View {
@State private var results = [Result]()
var body: some View {
List(results, id: \.trackId) { item in
VStack(alignment: .leading) {
Text(item.trackName ?? "").font(.headline) // <--- here optional
Text(item.collectionName ?? "") // <--- here optional
}
}.task {
await loadData()
}
}
func loadData() async {
guard let url = URL(string: "https://itunes.apple.com/search?term=taylor swift&entity") else {
print("Invalid URL")
return
}
do {
let (data, _) = try await URLSession.shared.data(from: url)
if let decodedResponse = try? JSONDecoder().decode(Response.self, from: data) {
results = decodedResponse.results
}
} catch {
print("Invalid data")
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416820.html
標籤:
下一篇:如何在Swift中使用二維陣列?
