transportation the significado programming programación lenguaje language español descargar swift

the - swift(lenguaje de programación)



El operador binario ''/'' no se puede aplicar a dos operandos ''Doble'' (3)

El error es un poco engañoso.

En el primer conjunto de código, array2 se declara implícitamente como un array de Int . Por lo tanto, cualquier intento de asignar un valor a un índice de array2 requerirá un valor Int .

El problema es que Double(value) / 2.0 da como resultado un valor Double , no un Int . Entonces el compilador está buscando una versión de / que devuelve un Int . Y esa versión espera dos parámetros Int . Ya que está suministrando dos parámetros Double , aparece el error mencionado en su pregunta.

La solución es convertir el resultado en un Int o usar dos parámetros Int para / .

var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = Int(Double(value) / 2.0) // cast to Int }

o

var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = value / 2 // Use two Int }

El resultado será el mismo en este caso. 8 serán reemplazados por 4 . 7 serán reemplazados por 3 , etc.

El segundo conjunto de código funciona tal cual porque declara que la matriz se rellena con Double para que todo coincida con el tipo correcto.

Al intentar ejecutar este bloque de código en Swift 3, encontré el error: el operador binario ''/'' no se puede aplicar a dos operandos ''Doble''

var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = Double(value) / 2.0 }

Sin embargo esto funciona

var array2 = [Double]() array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = value / 2.0 }

¿Por qué no funciona el primer bloque de código?


La respuesta de rmaddy es correcta en cuanto a por qué está viendo el problema, la declaración implícita de Int. En aras de la exhaustividad. Hay un par de maneras de arreglar esto, el casting es uno; otro aún no mencionado aquí es extender Double para incluir este caso, si necesita hacer esto lo suficiente, simplemente puede definir su propia versión de Double / Int y controlar cómo Swift lo maneja dentro de su propia función.

extension Double { static func / (left: Double, right: Int) -> Double { return left / Double(right) } }

Siempre puede agregar otra función manejando el caso inverso un Int / Double, etc ...


Para la primera, su matriz es de tipo Int por lo tanto, hacer array2.enumerated() le da value como Int . Cuando le hace esto, Double(value) / 2.0 , el resultado final devuelto es de tipo Double que es incompatible con su tipo de matriz.

Sin embargo, para el segundo, declaraste explícitamente una matriz de Double por array2.enumerated() tanto array2.enumerated() devuelve el value como Double por lo que la operación funciona bien.