我正在寻找一个可靠,可重复的模式来填充可选值。我想要的行为是"如果它没有,请使用此默认值"。
到目前为止,我有三种方法可以接近它。
// Three approaches for using a default value when the optional is nil
// Device.location is an optional `CLLocation?`
// cfg.defaultLocation is `CLLocation`
// 1: bitwise (nice and short, requires a holding variable)
let location1: CLLocation! = Device.location ?? cfg.defaultLocation
positionMap(location1)
// 2: if let (sooooo many lines!)
if let location2 = Device.location {
positionMap(location2)
} else {
positionMap(cfg.defaultLocation)
}
// 3: re-wrap (holding var :( )
let location3: CLLocation! = Device.location
positionMap(location3 ?? cfg.defaultLocation)
你们有更好的方法吗?为我带来了很多。
答案 0 :(得分:3)
我的方法是使用计算属性。使用这些的最大缺点是你总是计算属性值,这当然需要一些处理资源。但另一方面,最大的好处是,如果在应用程序生命周期中某个时候可选值发生变化,那么您不必手动更改非可选变量(保持默认值)。
let location : CLLocation {
return Device.location ?? cfg.defaultLocation
}