El valor se toma de un diccionario de Any que puede contener cadenas

if value is String {
    total += Double(value)    
}

Este código da el error "no se puede invocar el inicializador para el tipo 'Doble' con una lista de argumentos del tipo '(Cualquiera)'"

if let item = value as? String {
    total += Double(item)
}

Este código da el error "valor del tipo opcional 'Double?' no desenvuelto, ¿querías usar '!' o '?'? "

0
Alect Prasad 17 sep. 2018 a las 13:32

4 respuestas

La mejor respuesta

Valor del tipo opcional '¿Doble?' no sin envolver; ¿Querías usar '!' o '?'

Este error aparece porque está intentando agregar un valor opcional a total.

Double(item) produce un resultado opcional para que pueda agregarlo en la cadena if-let .

    if let item = value as? String, let doubleVal = Double(item) {
        total += doubleVal
    }
0
Ankit Jayaswal 17 sep. 2018 a las 10:41

Convertir cadena rápida a doble

Use Double, Float, CGFloat para convertir valores de punto flotante (números reales).

let lessPrecisePI = Float("3.14")
let morePrecisePI = Double("3.1415926536")
let width = CGFloat(Double("200.0")!)

Convertir cadena rápida a Int Use Int y las variantes como Int32, UInt64, etc. para convertir valores enteros.

let wholeNumber = Int("27")
let smallInt = Int16("34")
let largeInt = Int64("39384")

Consulte este blog para obtener más detalles supereasyapps.com

0
Isanka Thalagala 17 sep. 2018 a las 10:45

Double(fromString) es un inicializador que puede fallar, el resultado puede ser nulo y, por lo tanto, devuelve un Double? opcional

Puede usar el Operador de fusión nula de Swift:

if let item = value as? String {
    total += Double(item) ?? 0
}
1
zisoft 17 sep. 2018 a las 10:40

Pronosticar cualquier valor a veces puede dar un error fatal cuando el valor puede ser nulo. Entonces, ¿es una buena práctica dar valor predeterminado usando ??

1
steffi pravasi 17 sep. 2018 a las 10:41