迅捷-追加操作无法正常运行

时间:2018-08-16 16:31:12

标签: swift

在使用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,就会发生这种情况。 有人可以帮我...吗?

这是一个愚蠢的代码,但是可以帮助我解决项目中的实际问题...

1 个答案:

答案 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)