【问题标题】:Swift - append works erratically [duplicate]Swift - 附加工作不规律[重复]
【发布时间】:2018-08-17 00:47:34
【问题描述】:

我在使用 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 次并且如果我将“客户”元素声明为 var,就会发生这种情况。 谁能帮帮我....?

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

【问题讨论】:

  • 您需要创建 Customer 类的第二个实例
  • 类是引用类型。这意味着当您在第一次推送 customer 后更改它时,实际上您只是更改了同一个,然后添加了第二个引用。
  • 谢谢你们!!

标签: swift


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多