如何在swift中将标签出口字符串转换为double?
我有一个更新标签的计时器:labelOutletForSecondsCount.text。标签初始化为String" 0,00"。我不想将已停止的timeString(我从我的计时器中获取)保存为变量中的Double,以便在某些计算中使用它。
我认为这行代码应该这样做但是我得到以下内容" Swift编译器错误:无法转换表达式' Double'输入' Double'"。
var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text as NSString).doubleValue
这行代码很好用:
var textFieldInsertLengthIntoDoubleValue = (textFieldInsertLength.text as NSString).doubleValue
但为什么不使用labelOutletForSecondsCount.text?
我应该提到我在计算属性中这样做:
var length : Double {
var textFieldInsertLengthIntoDoubleValue = (textFieldInsertLength.text as NSString).doubleValue
return textFieldInsertLengthIntoDoubleValue
}
var time : Double {
var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text as NSString).doubleValue
return timeStringIntoDoubleValue
}
这很可能会增加奇怪的错误:无法转换表达式的类型' Double'输入' Double'。
答案 0 :(得分:2)
错误消息具有误导性。 text
的{{1}}属性是可选的:
UILabel
无法直接转换为var text: String? // default is nil
。你可以强行打开这个值:
NSString
但如果var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text! as NSString).doubleValue
值为text
,则会在运行时崩溃。更好用
“可选绑定”:
nil
或者,使用"nil-coalescing operator" ??
提供默认值:
var timeStringIntoDoubleValue = 0.0
if let text = labelOutletForSecondsCount.text {
timeStringIntoDoubleValue = (text as NSString).doubleValue
}
这里,var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text ?? "0" as NSString).doubleValue
评估(解包)文本
如果不是labelOutletForSecondsCount.text ?? "0"
则为值,否则为nil
。
它与文本字段一起编译的原因是"0"
属性
text
被声明为隐式解包的可选:
UITextField