Swift中的struct数组

thi*_*ift 6 struct swift

元素的迭代产生错误

找不到会员'convertFromStringInterpolationSegment'

println("\(contacts[count].name)")",直接列表项打印正常.

我错过了什么?

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"
Run Code Online (Sandbox Code Playgroud)

Ant*_*nio 6

for-in在项目的集合循环迭代,并提供实际的项目,而不是其在每次迭代指数.所以你的循环应该重写为:

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

注意这一行:

var count: Int = 0
Run Code Online (Sandbox Code Playgroud)

对你的代码没有任何影响,因为它中的count变量for-in被重新定义,并且嵌套在循环内的代码块是可见的.

如果您仍想使用索引,则必须将循环修改为:

for var count = 0; count < contacts.count; ++count {
Run Code Online (Sandbox Code Playgroud)

要么

for count in 0..<contacts.count {
Run Code Online (Sandbox Code Playgroud)

最后,如果你需要索引和值,也许最简单的方法是通过enumerate全局函数,它返回一个(索引,值)元组列表:

for (index, contact) in enumerate(contacts) {
    println("Index: \(index)")
    println("Value: \(contact)")
}
Run Code Online (Sandbox Code Playgroud)