这让我发疯了。我用"追加"所有的时间,但这次我真的无法找到问题。每当我向数组添加一个新项时,所有元素都保持不变,等于最后一个附加元素。 我错过了什么?我相信它一定很简单......
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
}
答案 0 :(得分:4)
因为,Swift Class是引用类型,你只需要添加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 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
}