斯威夫特 - 制作结构数组

时间:2016-11-11 18:25:43

标签: swift swift3

我正在尝试将结构添加到数组中。我知道这是可能的。我在网站上的另一篇文章中看到过它。但我想知道是否有任何方法可以在不创建变量的情况下向数组添加结构。

例如:

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

var contacts: [Person] = []

var person1: Person = Person(name: "Jack", surname: "Johnson", phone: 2, isCustomer: false) 
var person2: Person = Person(name: "alex", surname: "a", phone: 3, isCustomer: false)

contacts.append(person1)
contacts.append(person2)

for contact in contacts {
    print("\(contact.name)")
}

在此代码中,我们使用person1person2来创建“联系人”。但是如果你必须创建数百个联系人,那么设置所有这些变量就很烦人。

我试过的是:

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

var contacts: [Person] = []

Person(name: "Jack", surname: "Johnson", phone: 2, isCustomer: false)

contacts.append(Person) // Here I get this error: "Cannot convert value of type '(Person).Type' (aka 'Person.Type') to expected argument type 'Person'

有没有办法在不创建变量的情况下向数组添加结构?

2 个答案:

答案 0 :(得分:8)

它会给您一个错误,因为您尝试插入类型Person而不是实例。如果您想将某人添加到联系人而不将其绑定到变量,请执行以下操作:

contacts.append(Person(name: "Jack", surname: "Johnson", phone: 2, isCustomer: false))

答案 1 :(得分:3)

首先,我认为有人告诉你,如果你有大量数据,你肯定应该特别使用数据库。其次,当你使用contacts.append(Person)时,它对swift的编译器毫无意义。

一种选择是使用循环并将人添加到此数组中:

var contacts = [Person]() // take advantage of type inference
let names = ["Jack", "alex", ...] // ... means you can add as many names as you want
let surnames = ["Johnson", "a", ...]
let phones = [2, 3, ...]
let areCustomers = [false, false, ...]

for i in 0..<10 { // this will add 10 elements to contacts
    contacts.append(Person(name: names[i], surname: surname[i], phone: phones[i], isCustomer: areCustomers[i]))
}

如果您有大量数据,我必须坚持您应该考虑使用数据库。