在使用append时遇到一个问题,它看起来非常简单,但是我找不到解释,我创建了一个简单的示例来简单地解释事物。 我声明了一个名为Customer的类,如下所示:
class Customer {
var id: Int = 0
var name: String = ""
var latitude: Double = 0
var longitud: Double = 0
var image: UIImage = #imageLiteral(resourceName: "restaurantImage")
}
我初始化了一个空数组(目前是全局数组)
var customerList = [Customer]()
然后我有一个像这样的函数:
func createCustomerList () {
let customer = Customer()
customer.id = 1
customer.name = "Restaurant 1"
customer.latitude = 0.13
customer.longitud = 0.14
customer.image = #imageLiteral(resourceName: "restaurantImage1")
customerList.append(customer)
customer.id = 2
customer.name = "Restaurant 2"
customer.latitude = 0.15
customer.longitud = 0.16
customer.image = #imageLiteral(resourceName: "restaurantImage2")
customerList.append(customer)
}
我正在尝试使用相同的常量在“ customerList”数组中创建两个不同的元素。 当我检查数组时,它包含两个元素,但是两个元素是相同的(最新的),如果我将其制作10次并且将“ Customer”元素声明为var,就会发生这种情况。 有人可以帮我...吗?
这是一个愚蠢的代码,但是可以帮助我解决项目中的实际问题...
答案 0 :(得分:1)
好,让我们检查一下您的代码。
let customer = Customer()
好的,您已经创建了Customer
的新实例。
customer.id = 1
customer.name = "Restaurant 1"
customer.latitude = 0.13
customer.longitud = 0.14
customer.image = #imageLiteral(resourceName: "restaurantImage1")
您要设置必要的值并将其附加。因此,现在数组包含该客户。
现在,下一步是问题所在。您正在使用相同的Customer
实例并更改其信息。
customer.id = 2
customer.name = "Restaurant 2"
customer.latitude = 0.15
customer.longitud = 0.16
customer.image = #imageLiteral(resourceName: "restaurantImage2")
这反映在数组和let customer
实例中,因为数组包含对customer
的引用。因此,当您再次添加它时,将在更新第一个版本时添加最新版本。
解决方案
如果要追加其他客户,则应创建另一个实例
let customer2 = Customer()
//Change customer2 parameters
customerList.append(customer2)
或者您可以将声明更改为变量并将新实例存储到其中。
var customer = Customer()
//Change customer details
customerList.append(customer)
customer = Customer() // New customer instance
//Change customer details
customerList.append(customer)