我是 swift 新手,我試圖向 api 發出 get 請求,但還沒有得出一個有效的結果。我嘗試過但根本不起作用的所有示例
I need to send a json body to https://pincood.com/pincood/public/api/user/details and in Authorization I passed Bearer token like this "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHBzOi8vcGluY29vZC5jb20vcGluY29vZC9wdWJsaWMvYXBpL3VzZXIvbG9naW4iLCJpYXQiOjE2Njc4MjMxNzAsImV4cCI6MTY2ODE4MzE3MCwibmJmIjoxNjY3ODIzMTcwLCJqdGkiOiJVemo4bFp3ek16Z2FIV25QIn0.oCAk6db9c2BAhEGgU2gziYm2RX3hLbAtPUc7KQzIYWs" with GET request.
在輸出中,資料將顯示如下:
json 正文只包含一個值
{ “id”:2,“referral_code”:“pn7R7m”,“referance_referral_code”:“”,“first_name”:“Uzma”,“last_name”:“ansari”,“payment_mode”:“CASH”,“email”: “”、“性別”:“男性”、“出生日期”:“2022-06-23”、“手機”:“9326257573”、“國家代碼”:“ 91”、“圖片”:“https://pincood” .com/pincood/public/storage/user/profile/9326257573.png", "device_token": "dW_jfRo94fM:APA91bFluxLzYICoYw6MslhYWEzxET8NYKH27MzSmQNRT6fNLdo6eAIB6KBZv9IvkFrSHUA2GUD1RfNw1e2XVdIdSZjDf-627PRLopzOwInifGdWIA4k-nIwLDghycCAlhwW0KJy76Xe", "device_id": "ceae4b934e63a578", "device_type": "android", "login_by”:“manual”,“social_unique_id”:null,“latitude”:null,“longitude”:null,“stripe_cust_id”:null,“wallet_balance”:0,“rating”:“5.00”,“otp”:811078 ,“updated_at”:“2022-11-06 12:44:01”,“emergency_contact1”:“9999999999”,“emergency_contact2”:“”,“deleted_at”:空,“貨幣”:“?”,“sos” :“911”,“rental_content”:“虛擬內容”,“outstation_content”:“虛擬內容”}“otp”:811078,“updated_at”:“2022-11-06 12:44:01”,“emergency_contact1”:“9999999999”,“emergency_contact2”:“”,“deleted_at”:空,“貨幣”:“? ", "sos": "911", "rental_content": "虛擬內容", "outstation_content": "虛擬內容" }“otp”:811078,“updated_at”:“2022-11-06 12:44:01”,“emergency_contact1”:“9999999999”,“emergency_contact2”:“”,“deleted_at”:空,“貨幣”:“? ", "sos": "911", "rental_content": "虛擬內容", "outstation_content": "虛擬內容" }
我嘗試了這樣的實作 My Model :
struct TokenResponse: Codable { let id : Int let Referral_code: String let referance_referral_code: String let first_name: String let last_name: String let payment_mode: String let email: String let gender: String letbirth_date: String let mobile: String let country_code: String let圖片:String let device_token: String let device_id: String let device_type: String let login_by: String let social_unique_id: String let latitude: String let longitude: String let stripe_cust_id: String let wallet_balance: Int let rating: String let otp: Int let updated_at: String let Emergency_contact1: String let Emergency_contact2: String let deleted_at: String let currency: String let sos: String let rent_content: String let outstation_content: String
enum CodingKeys: String, CodingKey {
case id
case referral_code
case referance_referral_code
case first_name
case last_name
case payment_mode
case email, gender
case birth_date
case mobile
case country_code
case picture
case device_token
case device_id
case device_type
case login_by
case social_unique_id
case latitude, longitude
case stripe_cust_id
case wallet_balance
case rating, otp
case updated_at
case emergency_contact1
case emergency_contact2
case deleted_at
case currency, sos
case rental_content
case outstation_content
}
}
我的函式從我嘗試呼叫我的 api 的地方
func getRequest(){
let url = URL(string: "https://pincood.com/pincood/public/api/user/details/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHBzOi8vcGluY29vZC5jb20vcGluY29vZC9wdWJsaWMvYXBpL3VzZXIvbG9naW4iLCJpYXQiOjE2Njc4MjMxNzAsImV4cCI6MTY2ODE4MzE3MCwibmJmIjoxNjY3ODIzMTcwLCJqdGkiOiJVemo4bFp3ek16Z2FIV25QIn0.oCAk6db9c2BAhEGgU2gziYm2RX3hLbAtPUc7KQzIYWs")!
var request = URLRequest(url: url)
request.allHTTPHeaderFields = [
"Content-Type": "application/json",
"Session": "fb4e7f9b-0f31-4709-",
"AUthorization":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHBzOi8vcGluY29vZC5jb20vcGluY29vZC9wdWJsaWMvYXBpL3VzZXIvbG9naW4iLCJpYXQiOjE2Njc4MjMxNzAsImV4cCI6MTY2ODE4MzE3MCwibmJmIjoxNjY3ODIzMTcwLCJqdGkiOiJVemo4bFp3ek16Z2FIV25QIn0.oCAk6db9c2BAhEGgU2gziYm2RX3hLbAtPUc7KQzIYWs"
]
URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil else { return }
guard let data = data, let _ = response else { return }
// handle data
do{
//here dataResponse received from a network request
let decoder = JSONDecoder()
let codabledata = try decoder.decode(TokenResponse.self, from: data)
print(codabledata)
//Response result
// Completion(codabledata)
} catch let parsingError {
print("Error", parsingError)
}
}.resume()
}
getRequest()
uj5u.com熱心網友回復:
試試這個帶有“修改過的”url字串的示例代碼,以及需要匹配json您從服務器獲得的資料的相應資料模型:
EDIT-1:使用callback異步函式。
像這樣使用它:
getRequest() { results in
print(results)
}
func getRequest(callback: @escaping (TokenResponse?) -> Void) {
let theToken = "...."
if let url = URL(string: "https://pincood.com/pincood/public/api/user/details") {
var request = URLRequest(url: url)
request.allHTTPHeaderFields = [
"Content-Type": "application/json",
"Session": "fb4e7f9b-0f31-4709-",
"Authorization":"Bearer \(theToken)"
]
URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil else { return }
guard let data = data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase // <-- here
let codabledata = try decoder.decode(TokenResponse.self, from: data)
callback(codabledata) // <-- here
} catch {
print(error)
callback(nil) // <-- here
}
}.resume()
}
}
和
struct TokenResponse: Codable {
let id: Int
let referralCode, referanceReferralCode, firstName, lastName: String
let paymentMode, email, gender, birthDate: String
let mobile, countryCode, picture, deviceToken: String
let deviceId, deviceType, loginBy: String // <--
let socialUniqueId, latitude, longitude, stripeCustId: String? // <--
let walletBalance: Int
let rating: String
let otp: Int
let updatedAt, emergencyContact1, emergencyContact2: String
let deletedAt: String?
let currency, sos, rentalContent, outstationContent: String
}
您需要查閱 API 檔案以確定哪些屬性是可選的。在這種情況下添加?到他們。
EDIT-2:將令牌傳遞給函式:
func getRequest(token: String, callback: @escaping (TokenResponse?) -> Void) {
if let url = URL(string: "https://pincood.com/pincood/public/api/user/details") {
var request = URLRequest(url: url)
request.allHTTPHeaderFields = [
"Content-Type": "application/json",
"Session": "fb4e7f9b-0f31-4709-",
"Authorization":"Bearer \(token)" // <-- here
]
URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil else { return }
guard let data = data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let codabledata = try decoder.decode(TokenResponse.self, from: data)
callback(codabledata) // <-- here
} catch {
print(error)
callback(nil) // <-- here
}
}.resume()
}
}
并像這樣使用它:
getRequest(token: "your-token-here") { results in
print(results)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/529561.html
