无法使用API​​调用的JSON响应创建对象

时间:2017-09-14 16:51:18

标签: ios json swift alamofire

我已经进行了API调用,以便在应用中记录我的用户。我正在使用 Alamofire SwiftyJSON 。 API调用运行良好,我得到一个像这样的JSON文件:

{
    "code": 200,
    "message": "OK",
    "data": {
         "user_id": 1,
         "user_email": "test",
         "user_username": "kk1",
    }
}

为了在UserDefault中保存用户信息,我想使用此JSON响应创建我的用户对象。这是模型

class LFUser: NSObject {

    var user_id: Int?
    var user_email: String?
    var user_username: String?

    init(dict: [String: AnyObject]){
        super.init()
        user_id = dict["user_id"] as? Int
        user_email = dict["user_email"] as? String
        user_username = dict["user_username"] as? String
    }
}

以下是API调用和对象创建时登录功能的一部分:

func login(userEmail: String, userPassword: String, finished: @escaping(_ status:String,_ data: LFUser?)-> ()) {

            if let value = response.result.value {

            let dict = JSON(value)
            let code = dict["code"].intValue
            let message = dict["message"].stringValue



            if let data = dict["data"].dictionary {

                print(data)
                let user = LFUser(dict: data as [String : AnyObject])
                print(user.user_email)
                finished("Success", user)

        }
    }

打印(数据)效果很好但创建对象时出现问题,而print(user.user_email)显示为nil。

2 个答案:

答案 0 :(得分:0)

我会选择Swift 4 Codable代替:

struct User: Codable {
    let user_id: Int
    let user_email: String
    let user_username: String
}

struct Response: Codable {
    let code: Int
    let message: String
    let data: User
}

然后您可以解码传入的数据:

let response = try JSONDecoder().decode(Response.self, from: jsonData)

然后,为了将值保存为用户默认值,您可以使用JSONEncoderPropertyListEncoder将值编码为Data

答案 1 :(得分:0)

请检查:

if let data = dict["data"].dictionary {
    let user = LFUser(dict: data)
    print(user.user_email)
    finished("Success", user)
}


class LFUser: NSObject {

    var user_id: Int?
    var user_email: String?
    var user_username: String?

    init(dict: [String : SwiftyJSON.JSON]){
        super.init()
        user_id = dict["user_id"]?.intValue
        user_email = dict["user_email"]?.stringValue
        user_username = dict["user_username"]?.stringValue
    }
}