模式:当optional为nil时使用默认值

时间:2015-08-14 11:44:00

标签: swift optional

我正在寻找一个可靠,可重复的模式来填充可选值。我想要的行为是"如果它没有,请使用此默认值"。

到目前为止,我有三种方法可以接近它。

// 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)

你们有更好的方法吗?为我带来了很多。

1 个答案:

答案 0 :(得分:3)

我的方法是使用计算属性。使用这些的最大缺点是你总是计算属性值,这当然需要一些处理资源。但另一方面,最大的好处是,如果在应用程序生命周期中某个时候可选值发生变化,那么您不必手动更改非可选变量(保持默认值)。

let location : CLLocation {
    return Device.location ?? cfg.defaultLocation
}