斯威夫特 - 制作结构数组

Ale*_*nos 11 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)")
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,我们使用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'
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*yen 10

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

contacts.append(Person(name: "Jack", surname: "Johnson", phone: 2, isCustomer: false))
Run Code Online (Sandbox Code Playgroud)

  • 将 Person 实例存储在变量中 - 并附加该变量。 (2认同)

lmi*_*asf 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]))
}
Run Code Online (Sandbox Code Playgroud)

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