ios – Xcode – Swift编译错误:无法将表达式的’Double’转换为’Double’类型

如何在
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
点赞