如何在
swift中将标签出口字符串转换为double?
我有一个更新标签的计时器:labelOutletForSecondsCount.text.标签初始化为字符串“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’类型.
最佳答案 错误消息具有误导性. UILabel的text属性是可选的:
var text: String? // default is nil
它不能直接转换为NSString.你可以强行打开这个值:
var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text! as NSString).doubleValue
但如果文本值为nil,这会在运行时崩溃.更好用
“可选绑定”:
var timeStringIntoDoubleValue = 0.0
if let text = labelOutletForSecondsCount.text {
timeStringIntoDoubleValue = (text as NSString).doubleValue
}
或者,使用“nil-coalescing operator” ??
提供默认值:
var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text ?? "0" as NSString).doubleValue
这里,labelOutletForSecondsCount.text ?? “0”评估(解包)文本
如果不是nil则为value,否则为“0”.
它与文本字段编译的原因是text属性
UITextField声明为隐式解包的可选:
var text: String! // default is nil