如何从 API 的结构内部的结构中获取解码数据

问题描述 投票:0回答:1

我正在尝试学习如何使用 AlamoFire 并且我想获取此 struct MyData 内的结构的值。如何实现这个目标?


import Foundation
import Alamofire

struct MyData : Codable {
    
    let id: Int
    let uid : String
    let password : String
    let first_name : String
    let last_name :String
    let username : String
    let email : String
    let avatar : String
    let gender : String
    let phone_number : String
    let social_insurance_number : String
    let date_of_birth : String
    
    struct employment : Codable {
        let title : String
        let key_skill : String
    }
    
    struct address : Codable {
        var city : String
        var street_name : String
        var street_address : String
        var zip_code : String
        var state : String
        var country : String
        
        struct coordinates : Codable {
            var lat : Int
            var lng : Int
        }
    }
    
    
    struct credit_card : Codable{
        let cc_number : String
    }
    struct subscription : Codable {
        var plan : String
        var status : String
        var payment_method : String
        var term : String
    }
    
}


func getApi() {
   
    let url = "https://random-data-api.com/api/v2/users"
    AF.request(url).responseData { response in
        debugPrint(response)
        guard let data = response.data
        else{
           return
        }
        
        do {
            let decoder = JSONDecoder()
            let json = try decoder.decode(MyData?.self, from: data)
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            print("SOCIAL INSURANCE NUMBER : \(String(describing: json!.social_insurance_number))")  
        }
        catch{
            print(error)
        }   
    } 
  }

我尝试从 api 获取数据。我的数据模型有一个结构内的结构。我无法获取父结构内的结构,但我可以获取父结构中声明的变量的值

ios swift api struct alamofire
1个回答
0
投票

在您的

MyData
中插入以下代码以继续解码。

    let employment: Employment
    let address: Address
    let credit_card: CreditCard
    let subscription: Subscription

不要忘记将结构体上的第一个字母大写,添加

var coordinates
并将
Int
更改为
Double

struct Employment: Codable {
    // ...
}

struct Address: Codable {
    // ...
    var coordinates: Coordinates // Add this
    
    struct Coordinates: Codable {
        var lat: Double // Change Int to Double
        var lng: Double // Change Int to Double
    }
}

struct CreditCard: Codable {
    // ...
}

struct Subscription: Codable {
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.