在 Swift 中设计类/结构时,确定何时应该使用 Optional 类型的最佳实践是什么?
例如,假设我正在将 JSON 响应映射到一个Photo
对象,并且有一个属性photographerName
只是一个字符串。有时我们会收到响应photographerName
字段的空字符串。
我的Photo
对象是否应该使用String?
类型并将其分配给 nil?或者使用String
类型并将其设置为空字符串?
这实际上取决于您将在应用程序中使用的应用程序体系结构和数据结构。
没有规则可以描述如何在应用程序体系结构中正确使用可选链接。
首先,我们应该知道什么是可选链接。
可选链接是查询和调用属性的过程, 方法,以及当前可能为 nil 的可选选项上的下标。如果 可选包含值、属性、方法或下标调用 成功;如果可选为 nil,则为属性、方法或下标 调用返回 nil。可以将多个查询链接在一起,并且 如果链中的任何链接为 nil,则整个链将正常失败。
根据我的经验,当我显然无法定义我的模型是否可以具有某种关系或属性时,我在数据结构中使用可选值。
例:
struct User {
let name: String
let email: String
var friends: [String]?
init(name: String, email: String) {
self.name = name
self.email = email
}
}
let user = User(name: "Oleg", email: "Oleg@email.com")
我知道该用户将有姓名和电子邮件,但我不知道他是否会有任何朋友。此外,通过这种方式,我可以阻止我的代码对nil
对象执行操作。
如果您描述它实际上取决于应用程序的体系结构和要求。例如,我们是否应该显示占位符photographerName
是否为空?是否有任何其他操作正在使用photographerName
属性?
你喜欢使用什么取决于你,但是如果你收到一个带有可以nil
属性的响应,那么你应该使用optional
并在代码中处理它。
像这样:
struct Photo {
let photographerName: String?
init(photographerName: String? = nil) {
self.photographerName = photographerName
}
}
然后在代码中检查photographerName
是否有值:
if let photographerName = photo.photographerName {
// use photographerName in here
}