what programming language guide functions arreglos according swift for-loop runtime-error factors

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: