Xcode - Swift编译错误:无法转换表达式' Double'输入' Double'

时间:2014-12-20 11:04:07

标签: ios xcode swift compiler-errors

如何在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'。

1 个答案:

答案 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