Xcode – Swift Compiler Error: no se puede convertir el tipo de expresión 'Doble' para escribir 'Doble'

¿Cómo convertir una cadena de salida de label a una doble en swift?

Tengo un timer que actualiza la label: labelOutletForSecondsCount.text. La label se inicializa con una cadena "0,00". Yo que quería save el timeString detenido (obtengo de mi timer) como un doble en una variable para usarlo en algún cálculo.

Pensé que esta línea de código debería hacerlo pero obtengo el siguiente "Error del comstackdor Swift: no puedo convertir el tipo de expresión 'Doble' para escribir 'Doble'".

var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text as NSString).doubleValue 

Funcionó bien con esta línea de código:

 var textFieldInsertLengthIntoDoubleValue = (textFieldInsertLength.text as NSString).doubleValue 

Pero, ¿por qué no funciona con labelOutletForSecondsCount.text?

Debo mencionar que estoy haciendo esto en properties computadas:

 var length : Double { var textFieldInsertLengthIntoDoubleValue = (textFieldInsertLength.text as NSString).doubleValue return textFieldInsertLengthIntoDoubleValue } var time : Double { var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text as NSString).doubleValue return timeStringIntoDoubleValue } 

Esto probablemente se agrega al extraño error: no se puede convertir el tipo de expresión 'Doble' a 'Doble'.

El post de error es engañoso. La propiedad de text de UILabel es opcional:

 var text: String? // default is nil 

que no se puede convertir directamente a NSString . Podrías desenvolver por la fuerza el valor:

 var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text! as NSString).doubleValue 

pero esto queuepsaría en time de ejecución si el valor del text es nil . Mejor uso "enlace opcional":

 var timeStringIntoDoubleValue = 0.0 if let text = labelOutletForSecondsCount.text { timeStringIntoDoubleValue = (text as NSString).doubleValue } 

Alternativamente, use el "operador nil-coalescing" ?? para proporcionar un valor pnetworkingeterminado:

 var timeStringIntoDoubleValue = (labelOutletForSecondsCount.text ?? "0" as NSString).doubleValue 

Aquí, labelOutletForSecondsCount.text ?? "0" labelOutletForSecondsCount.text ?? "0" evalúa al valor de text (desenvuelto) si eso no es nil y, de lo contrario, a "0" .


La razón por la que comstack con un campo de text es que la propiedad de text de UITextField se declara como opcionalmente sin envolver implícitamente :

 var text: String! // default is nil