Error de rendimiento de iteración de elementos

no se pudo encontrar el miembro 'convertFromStringInterpolationSegment'

println("\(contacts[count].name)")", mientras que el elemento de la lista directa se imprime bien.

¿Qué me estoy perdiendo?

struct Person {
    var name: String
    var surname: String
    var phone: String
    var isCustomer: Bool

    init(name: String, surname: String, phone: String, isCustomer: Bool)
    {
        self.name = name
        self.surname = surname
        self.phone = phone
        self.isCustomer = isCustomer
    }

}

var contacts: [Person] = []

var person1: Person = Person(name: "Jack", surname: "Johnson", phone: "7827493", isCustomer: false)

contacts.append(person1)

var count: Int = 0
for count in contacts {
    println("\(contacts[count].name)") // here's where I get an error
}

println(contacts[0].name) // prints just fine - "Jack"
7
thinkswift 13 feb. 2015 a las 16:05

2 respuestas

La mejor respuesta

El ciclo for-in itera sobre una colección de elementos y proporciona el elemento real y no su índice en cada iteración. Entonces, su bucle debe reescribirse como:

for contact in contacts {
    println("\(contact.name)") // here's where I get an error
}

Tenga en cuenta que esta línea:

var count: Int = 0

No tiene ningún efecto en su código, porque la variable count en for-in se redefine y es visible para el bloque de código anidado dentro del ciclo.

Si aún desea jugar con índices, debe modificar su bucle como:

for var count = 0; count < contacts.count; ++count {

O

for count in 0..<contacts.count {

Por último, si necesita tanto el índice como el valor, tal vez la forma más fácil sea a través de la función global enumerate, que devuelve una lista de tuplas (índice, valor):

for (index, contact) in enumerate(contacts) {
    println("Index: \(index)")
    println("Value: \(contact)")
}
6
Antonio 13 feb. 2015 a las 13:15

En primer lugar, no debe usar init () en la estructura, porque la estructura tiene un inicializador predeterminado, luego en este bloque de código:

/*
var count: Int = 0
for count in contacts {
    println("\(contacts[count].name)") // here's where I get an error
}
*/

Su variable "cuenta" no es un número entero, su tipo es "Persona". Prueba esto:

/*
for count in contacts {
    println(count.name) // It`s must be OKey.
}
*/

Espero poder ayudarte y perdón por mi mal inglés: D

0
Oleh 13 abr. 2016 a las 09:44