我已经进行了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。
答案 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)
然后,为了将值保存为用户默认值,您可以使用JSONEncoder
或PropertyListEncoder
将值编码为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
}
}