我是 iOS 開發新手
我需要發出一個 API 請求,發送一些 POST 值并接收 json 物件
Ofc 我搜索了教程并看到了其他問題,但我發現的所有代碼都導致了各種錯誤。
這是我最后嘗試過的:
func getAppConfig() async {
guard let url = URL(string:"https://blasrv.com/appconfig.php")
else{
return }
let body: [String: String] = ["userid": "420", "device": "ios"]
let finalBody = try? JSONSerialization.data(withJSONObject: body)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = finalBody
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
URLSession.shared.dataTask(with: request){
(data, response, error) in
guard let data = data else{
return
}
do{
let jsondata = Data(data)
if let json = try JSONSerialization.jsonObject(with: jsondata, options: []) as? [String: Any] {
// try to read out a string array
if let nickname = json["nickname"] as? [String] {
print(nickname)
}
}
gotConfig = true
await fetchData()
}catch{
print("data not valid")
}
}
.resume()
}
它給:
Cannot pass function of type '(Data?, URLResponse?, Error?) async -> Void' to parameter expecting synchronous function type
上
URLSession.shared.dataTask(with: request)
uj5u.com熱心網友回復:
問題是您將舊異步方式與新異步等待方式混合使用,您需要
class ViewController: UIViewController {
var gotConfig = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Task {
do {
try await getAppConfig()
}
catch {
print(error)
}
}
}
func getAppConfig() async throws {
guard let url = URL(string:"https://blasrv.com/appconfig.php") else { return }
let body: [String: String] = ["userid": "420", "device": "ios"]
let finalBody = try JSONSerialization.data(withJSONObject: body)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = finalBody
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let (data, _) = try await URLSession.shared.data(for: request)
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
// try to read out a string array
if let nickname = json["nickname"] as? [String] {
print(nickname)
}
}
gotConfig = true
await fetchData()
}
func fetchData() async {
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/497338.html
