swift - 双精度的 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: "--")
}
解决方案
map
这是在optional上使用的好地方:
let currentValue = uvProduct.currentValue()?.value
let currentTextProvider = CLKSimpleTextProvider(text: currentValue.map(String.init) ?? "--")
map
nil
如果可选是将返回nil
,否则它将运行提供的闭包。在这种情况下,String.init
接受 aDouble
并返回 a String
。nil-coalescing 运算符 ??
解开map
(which is a )的结果或用if isString?
替换它。"--"
currentValue
nil
推荐阅读
- google-data-studio - 当我没有在下拉控件过滤器中选择任何内容时,如何更改 DataStudio 在图表中的默认显示?
- string - 具有后缀树的最短不可重复子串
- javascript - 单通道中的强模糊效果着色器?
- javascript - 为什么在单击事件侦听器中触发 click() 不会导致无限循环?
- python - Django Formset:从现有产品目录中添加行?
- android - 如何将数据(图像)从 RecyclerView 传递到 Kotlin 中的单独 Activity?
- java - 将 Volley 添加到 Android 项目时遇到问题
- python - 每次调用函数时,Tkinter scale 都会卡住
- visual-studio-code - 您可以从项目中的何处归档文件在 Visual Studio 代码中导入的文件吗?
- spring - RefreshEndpoint 不适用于 EventListner