programming - ¿Por qué falla mi bucle Swift con error "No se puede formar el rango con final<inicio"?
swift variables (2)
En tu segundo bucle, siempre comenzaré en 2, lo que significa que estarás en bucle desde 2...1
Tengo un bucle for que verifica si un número es un factor de un número, luego verifica si ese factor es primo y luego lo agrega a una matriz. Dependiendo del número original, obtendré un error que dice
error fatal: No se puede formar un rango con final <inicio
Esto sucede casi siempre, pero para algunos números funciona bien. Los únicos números que he encontrado para trabajar con él son 9, 15 y 25.
Aquí está el código:
let num = 16 // or any Int
var primes = [Int]()
for i in 2...(num/2) {
if ((num % i) == 0) {
var isPrimeFactor = true
for l in 2...i-1 {
if ((i%l) == 0) {
isPrimeFactor = false;
}//end if
}//end for
if (isPrimeFactor == true) {
primes.append(i)
}//end if
}//end if
}//end for
Si necesita un bucle con un rango de valores dinámico, sugiero que use stride(to:by:)
lugar de ..<
o ...
Básicamente ..<
o ...
se start_index > end_index
si start_index > end_index
.
Ex:
let k = 5
for i in 10...k { print("i=/(i)") }
for i in 10..<k { print("i=/(i)") }
Como arreglar:
// swift 2.3
let k = 5
for i in 10.stride(to: k+1, by: 1) { print("i=/(i)") }
for i in 10.stride(to: k, by: 1) { print("i=/(i)") }
// swift 3.0
let k = 5
for i in stride(from: 10, through: k, by: 1) { print("i=/(i)") }
for i in stride(from: 10, to: k, by: 1) { print("i=/(i)") }
NOTA: los 2 bloques anteriores no imprimirán nada , pero uno de ellos se bloqueará durante la ejecución. Si desea pasar de un número más alto a un número más bajo, entonces el parámetro by
debe cambiarse a un número negativo .
Referencia: