2015-02-13 19 views
6

Iteration của các yếu tố mang lại lỗiArray của struct trong Swift

không thể tìm thấy thành viên 'convertFromStringInterpolationSegment'

println("\(contacts[count].name)")", trong khi trực tiếp in danh mục tốt.

Tôi đang thiếu gì?

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" 

Trả lời

6

Vòng lặp for-in lặp qua tập hợp các mục và cung cấp mục thực tế chứ không phải chỉ mục của nó ở mỗi lần lặp. Vì vậy, vòng lặp của bạn nên được viết lại như sau:

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

Lưu ý rằng dòng này:

var count: Int = 0 

không có tác dụng trong mã của bạn, bởi vì count biến trong for-in được xác định lại và hiển thị cho các khối mã lồng vào bên trong vòng lặp.

Nếu bạn vẫn muốn chơi với chỉ số, sau đó bạn phải thay đổi vòng lặp của bạn như:

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

hoặc

for count in 0..<contacts.count { 

Cuối cùng, nếu bạn cần cả hai chỉ số và giá trị, có thể cách đơn giản nhất là thông qua hàm toàn cầu enumerate, trả về danh sách (t.độ chỉ mục, giá trị) tuples:

for (index, contact) in enumerate(contacts) { 
    println("Index: \(index)") 
    println("Value: \(contact)") 
} 
+0

Cảm ơn, Antonio. Nó thực sự giống như tôi đã từng có nó trong Python. Tôi đoán tôi đã quá đơn giản. Và kudo cho ** liệt kê **, tôi quên nó có sẵn trong Swift. – thinkswift

0

Trước hết, bạn không nên sử dụng init() trong cấu trúc, vì Cơ cấu có initializer default.Then trong khối mã này:

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

biến "đếm" của bạn không phải là số nguyên, nó `s loại là "Người". Hãy thử điều này:

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

Tôi hy vọng tôi giúp bạn, và xin lỗi vì tiếng Anh xấu của tôi: D

Các vấn đề liên quan