我在某处读到,在使用 Swift 传递模型数据时使用结构是最佳实践。
我一直在这样做,但我一直在想,对于创建大型(且不断增长的)用户数据对象,我是否可以做些什么:
struct UserAccount {
var id: String?
let authId: String
let emailAddress: String
let mobilePhoneNumber: String
let firstName: String
let lastName: String
let countryCode: String
let homepageUrl: String
let tagline: String
let pictureUrl: String
let accountState: AccountState = .NoAccount
// ...
}
这或多或少是我在创建用户帐户时使用的,但后来感觉必须在代码中实例化巨大的对象是很麻烦和错误的。我正在使用 json-swift 解析 JSON 响应但随后必须单独实例化模型,如下所示:
let id = jsonData["id"].string!
let authId = jsonData["authId"].string!
let emailAddress = jsonData["emailAddress"].string!
let mobilePhoneNumber = jsonData["mobilePhoneNumber"].string!
let firstName = jsonData["firstName"].string!
let lastName = jsonData["lastName"].string!
let countryCode = jsonData["countryCode"].string!
let homepageUrl = jsonData["homepageUrl"].string!
let tagline = jsonData["tagline"].string!
let pictureUrl = jsonData["pictureUrl"].string!
let accountState = convertAccountStateStringToEnum(jsonData["accountState"].string!)
let userAccount = UserAccount(
id: id,
authId: authId,
emailAddress: emailAddress,
mobilePhoneNumber: mobilePhoneNumber,
firstName: firstName,
lastName: lastName,
countryCode: countryCode,
homePageUrl: homepageUrl,
tagline: tagline,
pictureUrl: pictureUrl,
accountState: accountState
)
上面我在实例化结构之前实例化了变量,这似乎很荒谬,但我这样做的原因是,当 IDE 从结构中给我类型强制错误时,很难理解出了什么问题,所以这让我在进行模型更改时可以更快地排除故障。对此有什么想法吗?
我的问题:
稍后该用户对象可能在服务器端包含更多数据,使用 50 多行实例化使用模型似乎不是一个好主意,因此:
- 是否有以更简单的方式创建结构的解决方案?该模式有名称吗?
- 我应该创建与特定任务相关的用户模型吗?例如,用于 GET 或 PUT 配置文件的 UserAccount 模型可能与用于验证、获取用户设置或列出我的服务中最受欢迎的帐户的模型不同。
- 人们是否只是保持原样并定义映射器以便没有冗余?如果是这样 - 什么是这方面的一个很好的例子?
谢谢。
最佳答案
遇到这种情况时,我会为采用 JSON 数据的模型构建另一个初始化器:
struct UserAccount {
// ...
init(jsValue: JSValue) {
id = jsonData["id"].string!
authId = jsonData["authId"].string!
emailAddress = jsonData["emailAddress"].string!
mobilePhoneNumber = jsonData["mobilePhoneNumber"].string!
firstName = jsonData["firstName"].string!
lastName = jsonData["lastName"].string!
countryCode = jsonData["countryCode"].string!
homepageUrl = jsonData["homepageUrl"].string!
tagline = jsonData["tagline"].string!
pictureUrl = jsonData["pictureUrl"].string!
accountState = convertAccountStateStringToEnum(jsonData["accountState"].string!)
}
}
然后您可以简单地从您的 JSON 数据创建新的 UserAccount
实例:
let userAccount = UserAccount(jsValue: jsonData)
关于xcode - 在 Swift 中使用结构时如何简洁地定义模型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610362/