首页 > 解决方案 > 双精度的 Swift 可选和默认值

问题描述

我正在尝试根据可选响应中的双精度设置文本提供程序的值。我觉得应该有一种更短的方法来做到这一点,但是当我尝试使用默认值时,它坚持默认必须是双精度值,我想要一个字符串来替换它。

伪代码:

If we have a current value 
    use it
 else
    use "--"

我认为会起作用的

let currentValue = uvProduct.currentValue()?.value
currentTextProvider = CLKSimpleTextProvider(text: String( currentValue ?? "--" ))

当前尝试

let currentValue = uvProduct.currentValue()?.value
let currentTextProvider : CLKSimpleTextProvider

if (currentValue != nil){
    currentTextProvider = CLKSimpleTextProvider(text: String( currentValue! ))
} else {
    currentTextProvider = CLKSimpleTextProvider(text: "--")
}

标签: swiftoptional

解决方案


map这是在optional上使用的好地方:

let currentValue = uvProduct.currentValue()?.value
let currentTextProvider = CLKSimpleTextProvider(text: currentValue.map(String.init) ?? "--")

mapnil如果可选是将返回nil,否则它将运行提供的闭包。在这种情况下,String.init接受 aDouble并返回 a Stringnil-coalescing 运算符 ??解开map(which is a )的结果或用if isString?替换它。"--"currentValuenil


推荐阅读