我应该如何分配我的数据模型以使用 Alamofire 映射 JSON?
How should I assign my data models to map the JSON using Alamofire?
我是新手,所以我制作了一些模型用于映射 JSON 但是早期有一些模型可以显示模板,现在我要在视图上显示一些真实的内容而不是使用 Alamofire
。这可能很愚蠢,但我应该如何 assign/replace 数据模型才能使其正常工作?
这是 get
方法:
friendsAPI.getFriends { [weak self] users in
self?.friends0 = users! // here is the crash happens because there are two different data models - `FriendModel` and `UserModel`
self?.tableView.reloadData()
print(users)
}
有UserModel
我习惯在不同的视图上显示一些内容:
struct UserModel: Equatable {
static func == (lhs: UserModel, rhs: UserModel) -> Bool {
lhs.userSurname == rhs.userSurname
}
let userFirstName: String
let userSurname: String
let userPhoto: UIImage?
var userPhotos: [UIImage]
let userAge: Int
let id: Int
}
现在有 FriendModel
用于解析 JSON:
// MARK: - FriendsResponse
class FriendsResponse: Codable {
let response: FriendsModel
}
// MARK: - Response
class FriendsModel: Codable {
let count: Int
let items: [FriendModel]
}
// MARK: - Item
class FriendModel: Codable {
let id: Int
let lastName, trackCode, firstName: String
let photo100: String
enum CodingKeys: String, CodingKey {
case id
case lastName = "last_name"
case trackCode = "track_code"
case firstName = "first_name"
case photo100 = "photo_100"
}
}
在我的大部分应用程序中,我使用 UserModel
来处理和显示内容。
那么,我应该如何分配这个数据模型呢?
P.S.: 如果有人能帮助我,我会很高兴!谢谢!
添加从 FriendModel 转换为 UserModel 的方法:
struct UserModel {
init(friend: FriendModel) {
id = friend.id
userFirstName = friend.firstName
userSurname = friend.lastName
... // assign all the other fields as needed
}
}
然后用它来转换你的结果:
friendsAPI.getFriends { [weak self] apiFriends in
self?.friends0 = apiFriends.map({ UserModel(friend: [=11=]) })
}
这是一个 init 方法,但您可以随意将它放在像 func userFromFriend(_ friend: FriendModel) -> UserModel
这样的普通 func 中,然后将该 func 放在任何您想要的地方。
我是新手,所以我制作了一些模型用于映射 JSON 但是早期有一些模型可以显示模板,现在我要在视图上显示一些真实的内容而不是使用 Alamofire
。这可能很愚蠢,但我应该如何 assign/replace 数据模型才能使其正常工作?
这是 get
方法:
friendsAPI.getFriends { [weak self] users in
self?.friends0 = users! // here is the crash happens because there are two different data models - `FriendModel` and `UserModel`
self?.tableView.reloadData()
print(users)
}
有UserModel
我习惯在不同的视图上显示一些内容:
struct UserModel: Equatable {
static func == (lhs: UserModel, rhs: UserModel) -> Bool {
lhs.userSurname == rhs.userSurname
}
let userFirstName: String
let userSurname: String
let userPhoto: UIImage?
var userPhotos: [UIImage]
let userAge: Int
let id: Int
}
现在有 FriendModel
用于解析 JSON:
// MARK: - FriendsResponse
class FriendsResponse: Codable {
let response: FriendsModel
}
// MARK: - Response
class FriendsModel: Codable {
let count: Int
let items: [FriendModel]
}
// MARK: - Item
class FriendModel: Codable {
let id: Int
let lastName, trackCode, firstName: String
let photo100: String
enum CodingKeys: String, CodingKey {
case id
case lastName = "last_name"
case trackCode = "track_code"
case firstName = "first_name"
case photo100 = "photo_100"
}
}
在我的大部分应用程序中,我使用 UserModel
来处理和显示内容。
那么,我应该如何分配这个数据模型呢?
P.S.: 如果有人能帮助我,我会很高兴!谢谢!
添加从 FriendModel 转换为 UserModel 的方法:
struct UserModel {
init(friend: FriendModel) {
id = friend.id
userFirstName = friend.firstName
userSurname = friend.lastName
... // assign all the other fields as needed
}
}
然后用它来转换你的结果:
friendsAPI.getFriends { [weak self] apiFriends in
self?.friends0 = apiFriends.map({ UserModel(friend: [=11=]) })
}
这是一个 init 方法,但您可以随意将它放在像 func userFromFriend(_ friend: FriendModel) -> UserModel
这样的普通 func 中,然后将该 func 放在任何您想要的地方。