【发布时间】:2014-12-23 23:27:34
【问题描述】:
我在某处读到,使用 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 模型可能与用于身份验证、获取用户设置或列出我的服务上最受欢迎的帐户的模型不同。
- 人们是否只是保持原样并定义映射器以便没有冗余?如果是这样 - 有什么好的例子?
谢谢。
【问题讨论】: