Swift - 构造结构体数组

15
我正在尝试向数组中添加结构体。我知道这是可能的。我在网站上的另一篇帖子中看到过。但我想知道是否有任何方法可以在不创建变量的情况下向数组中添加结构体。
例如:
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'
有没有办法将结构体添加到数组中而不创建变量?

从数据库(如Coredata、Realm、SQLite)、远程源(iCloud、Firebase)甚至仅仅是文件(plist、csv)中提取您的数据。 - Josh Homann
使用数据库或字典数组和重复循环。 - vadian
10
这两条评论有什么用处?! - Shayne
2个回答

18

你之所以会收到错误信息是因为你正在尝试插入类型Person而不是实例。如果你想将一个人添加到联系人列表中而不绑定它到一个变量上,只需执行以下操作:

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

2
将Person实例存储在一个变量中,并将该变量附加。 - Adrian Borcea
我们还有别的方法吗?因为我的结构体中有更多的值。 - iSrinivasan27
@iSrinivasan27,你说的结构体有更多的值是什么意思?如果你有示例代码会更有帮助。 - Adam Van Prooyen

5

首先,如果你有大量数据,我认为你应该使用数据库。其次,在使用 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]))
}

如果你有大量的数据,我必须坚持建议你考虑使用数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接