【问题标题】:Swift Append() method overwrite previous data [duplicate]Swift Append()方法覆盖以前的数据[重复]
【发布时间】:2020-03-17 10:18:43
【问题描述】:

我现在正在学习 iOS。我在使用 append() 方法时遇到了困难。该方法正在覆盖以前的数据。以下是我的模型文件

import Foundation
import EVReflection

class RequestItem: EVObject {
    var itemId: NSNumber?
    var requestedQty: Int?
    var name: String!

}

这是我的 viewController 文件

import UIKit

class ViewController: UIViewController {

    var requestItems: [RequestItem] = []
    var requestItem = RequestItem()


    func setUpData() {
        for i in 1...10 {


            if  i < 3  {

                requestItem.itemId = i as NSNumber
                requestItem.requestedQty = 10
                requestItem.name = "Item name \(i)"


                self.requestItems.append(requestItem)

                print("--------------------------------------------Start--------------------------------------------")
                print( requestItems )
                print("--------------------------------------------End--------------------------------------------")
            }

        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        setUpData()

    }


}

我得到的结果如下

--------------------------------------------Start--------------------------------------------
[RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 1",
  "itemId" : 1
}]
--------------------------------------------End--------------------------------------------
--------------------------------------------Start--------------------------------------------
[RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 2",
  "itemId" : 2
}, RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 2",
  "itemId" : 2
}]
--------------------------------------------End--------------------------------------------


我想得到的结果如下所示

--------------------------------------------Start--------------------------------------------
[RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 1",
  "itemId" : 1
}]
--------------------------------------------End--------------------------------------------
--------------------------------------------Start--------------------------------------------
[RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 1",
  "itemId" : 1
}, RequestItem = {
  "requestedQty" : 10,
  "name" : "Item name 2",
  "itemId" : 2
}]
--------------------------------------------End--------------------------------------------

我的问题是**为什么 itemId 重复?我应该如何解决这个问题?

【问题讨论】:

    标签: swift


    【解决方案1】:

    RequestItem 是引用类型,您始终使用(引用)相同的项目。

    循环中创建一个新实例

    var requestItems: [RequestItem] = []
    
    func setUpData() {
        for i in 1...10 {
            if  i < 3  {
                let requestItem = RequestItem()
                requestItem.itemId = i as NSNumber
                requestItem.requestedQty = 10
                requestItem.name = "Item name \(i)"
    
                self.requestItems.append(requestItem)
    
                print("--------------------------------------------Start--------------------------------------------")
                print( requestItems )
                print("--------------------------------------------End--------------------------------------------")
            }
        }
    }
    

    【讨论】:

    【解决方案2】:

    您只创建了一个 RequestItem 实例。当您第一次循环时,它会将实例的值设置为 1 。然后你再次循环同一个实例,因为类是引用类型对象。

    解决方案是每次循环工作时都需要创建一个RequestItem 的新实例。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2018-04-07
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多