Buscar..


Sintaxis

  • para constantes en secuencia {sentencias}
  • para constante en secuencia donde condición {declaraciones}
  • para var variable en secuencia {sentencias}
  • para _ en secuencia {sentencias}
  • para caso dejar constante en secuencia {sentencias}
  • para el caso se deja constante en secuencia donde condición {declaraciones}
  • para el caso var variable en secuencia {sentencias}
  • condición {declaraciones}
  • repite {sentencias} mientras condición
  • sequence.forEach (body: (Element) throws -> Void)

Bucle de entrada

El bucle for-in te permite iterar sobre cualquier secuencia.

Iterando sobre un rango

Puede iterar en rangos medio abiertos y cerrados:

for i in 0..<3 {
    print(i)
}

for i in 0...2 {
    print(i)
}

// Both print:
// 0
// 1
// 2

Iterando sobre una matriz o conjunto

let names = ["James", "Emily", "Miles"]

for name in names {
   print(name)
}

// James
// Emily
// Miles
2.1 2.2

Si necesita el índice para cada elemento de la matriz, puede usar el método enumerate() en SequenceType .

for (index, name) in names.enumerate() {
   print("The index of \(name) is \(index).")
}

// The index of James is 0.
// The index of Emily is 1.
// The index of Miles is 2.

enumerate() devuelve una secuencia perezosa que contiene pares de elementos con Int s consecutivos, comenzando desde 0. Por lo tanto, con matrices, estos números corresponderán al índice dado de cada elemento; sin embargo, esto puede no ser el caso con otros tipos de colecciones.

3.0

En Swift 3, enumerate() ha sido renombrado a enumerated() :

for (index, name) in names.enumerated() {
   print("The index of \(name) is \(index).")
}

Iterando sobre un diccionario

let ages = ["James": 29, "Emily": 24]

for (name, age) in ages {
    print(name, "is", age, "years old.")
}

// Emily is 24 years old.
// James is 29 years old.

Iterando a la inversa

2.1 2.2

Puede usar el método reverse() en SequenceType para iterar sobre cualquier secuencia a la inversa:

for i in (0..<3).reverse() {
    print(i)
}

for i in (0...2).reverse() {
    print(i)
}

// Both print:
// 2
// 1
// 0

let names = ["James", "Emily", "Miles"]

for name in names.reverse() {
    print(name)
}

// Miles
// Emily
// James
3.0

En Swift 3, reverse() ha cambiado su nombre a reversed() :

for i in (0..<3).reversed() {
    print(i)
}

Iterando sobre rangos con zancada personalizada

2.1 2.2

Mediante el uso de los métodos stride(_:_:) en Strideable puede iterar en un rango con un paso personalizado:

for i in 4.stride(to: 0, by: -2) {
    print(i)
}

// 4
// 2

for i in 4.stride(through: 0, by: -2) {
    print(i)
}

// 4
// 2
// 0
1.2 3.0

En Swift 3, los métodos de stride(_:_:) en Stridable han sido reemplazados por las funciones de stride(_:_:_:) global stride(_:_:_:) :

for i in stride(from: 4, to: 0, by: -2) {
    print(i)
}

for i in stride(from: 4, through: 0, by: -2) {
    print(i)
}

Bucle de repetición

De manera similar al bucle while, solo se evalúa la instrucción de control después del bucle. Por lo tanto, el bucle siempre se ejecutará al menos una vez.

var i: Int = 0

repeat {
   print(i)
   i += 1
} while i < 3

// 0
// 1
// 2

mientras bucle

Un while de bucle se ejecutará siempre que la condición es verdadera.

var count = 1

while count < 10 {
    print("This is the \(count) run of the loop")
    count += 1
}

Tipo de secuencia para cada bloque

Un tipo que se ajuste al protocolo SequenceType puede recorrer sus elementos dentro de un cierre:

collection.forEach { print($0) }

Lo mismo podría hacerse con un parámetro nombrado:

collection.forEach { item in
    print(item)
}

* Nota: las declaraciones de flujo de control (como break o continue) no pueden usarse en estos bloques. Se puede llamar a una devolución y, si se llama, devolverá inmediatamente el bloque para la iteración actual (como lo haría una continuación). La siguiente iteración se ejecutará.

let arr = [1,2,3,4]

arr.forEach {
    
    // blocks for 3 and 4 will still be called
    if $0 == 2 {
        return
    }
}

Bucle de entrada con filtrado.

  1. where cláusula

Al agregar una cláusula where , puede restringir las iteraciones a aquellas que satisfagan la condición dada.

for i in 0..<5 where i % 2 == 0 {
    print(i)
}

// 0
// 2
// 4


let names = ["James", "Emily", "Miles"]

for name in names where name.characters.contains("s") {
    print(name)
}

// James
// Miles
  1. cláusula de case

Es útil cuando necesita iterar solo a través de los valores que coinciden con algún patrón:

let points = [(5, 0), (31, 0), (5, 31)]
for case (_, 0) in points {
    print("point on x-axis")
}

//point on x-axis
//point on x-axis

¿También puede filtrar valores opcionales y desenvolverlos si es apropiado agregando ? marcar después de la constante de unión:

let optionalNumbers = [31, 5, nil]
for case let number? in optionalNumbers {
    print(number)
}

//31    
//5

Rompiendo un bucle

Un bucle se ejecutará mientras su condición siga siendo verdadera, pero puede detenerlo manualmente usando la palabra clave break . Por ejemplo:

var peopleArray = ["John", "Nicole", "Thomas", "Richard", "Brian", "Novak", "Vick", "Amanda", "Sonya"]
var positionOfNovak = 0

for person in peopleArray {
    if person == "Novak" { break }
    positionOfNovak += 1
}

print("Novak is the element located on position [\(positionOfNovak)] in peopleArray.")
//prints out: Novak is the element located on position 5 in peopleArray. (which is true)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow