Swift Append() 方法覆盖以前的数据

Por*_*Por 0 swift

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

import Foundation
import EVReflection

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

}

Run Code Online (Sandbox Code Playgroud)

这是我的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()

    }


}
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下

--------------------------------------------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--------------------------------------------


Run Code Online (Sandbox Code Playgroud)

我想得到的结果如下

--------------------------------------------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--------------------------------------------

Run Code Online (Sandbox Code Playgroud)

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

vad*_*ian 5

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--------------------------------------------")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个问题已经被问过和回答过很多次了(例如你:/sf/answers/3108888681/) (2认同)