【问题标题】:append new item to an array of a class in Swift 2.0 [duplicate]将新项目附加到 Swift 2.0 中的类的数组 [重复]
【发布时间】:2016-03-13 08:24:43
【问题描述】:

这快把我逼疯了。我一直用“追加”,但这次我真的找不到问题。每当我向数组中添加一个新项目时,所有元素都保持不变,等于最后一个附加的元素。 我错过了什么?我相信它一定是非常简单的......

  var MyDatabase : [MyClass] = []

    class MyClass : NSObject {
        var x : String = ""
    }

    let Item = MyClass()
    for (var i = 0 ; i < 5 ; i++){

        Item.x = "\(i)"
        MyDatabase.append(Item)
        print(MyDatabase.first!.x) // it shows 0,1,2,3,4 and it should always be "0"
    }
    for (var i = 0 ; i < MyDatabase.count ; i++){
    print(MyDatabase[i].x) // it shows 4,4,4,4,4 and it should be 0,1,2,3,4
    }

【问题讨论】:

  • 非常感谢马丁 R!

标签: ios swift class append swift2


【解决方案1】:

因为Swift类是引用类型,你只需添加5个指向同一个对象的引用

改成这个来创建5个对象

class MyClass : NSObject {
    var x : String = ""
}

var MyDatabase : [MyClass] = []

for (var i = 0 ; i < 5 ; i++){
    let Item = MyClass()
    Item.x = "\(i)"
    MyDatabase.append(Item)
}
print(MyDatabase.first!.x) // 0

Swift struct 是值类型,

struct MyClass {
    var x : String = ""
}

var MyDatabase : [MyClass] = []
var Item = MyClass()

for (var i = 0 ; i < 5 ; i++){
    Item.x = "\(i)"
    MyDatabase.append(Item)
    print(MyDatabase.first!.x) // 0 0 0 0 0 
}

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多