如何在 swift 中制作数组的浅拷贝
How to make shallow copy of array in swift
我已经搜索了一段时间,但找不到合理的答案。我想add/remove一个数组中的对象在指向第一个数组的第二个数组中生效。
class Person
{
var name:String = ""
}
var arr1:[Person] = [Person]()
let p1 = Person()
p1.name = "Umair"
let p2 = Person()
p2.name = "Ali"
arr1.append(p1)
arr1.append(p2)
var arr2 = arr1
print("\(arr1.count)") //"2\n"
print("\(arr2.count)") //"2\n"
arr1.removeFirst()
print("\(arr1.count)") //"1\n"
print("\(arr2.count)") //"2\n"
为什么更改 arr1 不会影响 arr2。请帮我完成这个。
数组是值类型。当我们复制它们时,每个副本都相互独立。这是Swift的优点。您正在尝试做的事情需要参考,以便其他人可以看到对一个人的影响。试试这段代码。创建一个包含您的数据的 class(引用类型)。现在可以在另一个容器中看到对容器的更改。
class Person
{
var name: String
init(_ name: String) {
self.name = name
}
}
let p1 = Person("Umair")
let p2 = Person("Ali")
class Container {
var people = [Person]()
init(people: [Person]) {
self.people = people
}
}
let arr1 = Container(people: [p1, p2])
let arr2 = arr1
print(arr1.people)
print(arr2.people)
arr1.people.removeFirst()
print(arr1.people)
print(arr2.people)
即使您正在使用 Swift,您仍然可以使用 NSArray
。
根据 Apple 的文档,
NSArray is an object representing a static ordered collection, for use instead of an Array constant in cases that require reference semantics.
唯一的缺点是您必须 import Foundation
。如果您正在创建 iOS 或 Mac 应用程序,这不是问题,因为您已经依赖它了。
我已经搜索了一段时间,但找不到合理的答案。我想add/remove一个数组中的对象在指向第一个数组的第二个数组中生效。
class Person
{
var name:String = ""
}
var arr1:[Person] = [Person]()
let p1 = Person()
p1.name = "Umair"
let p2 = Person()
p2.name = "Ali"
arr1.append(p1)
arr1.append(p2)
var arr2 = arr1
print("\(arr1.count)") //"2\n"
print("\(arr2.count)") //"2\n"
arr1.removeFirst()
print("\(arr1.count)") //"1\n"
print("\(arr2.count)") //"2\n"
为什么更改 arr1 不会影响 arr2。请帮我完成这个。
数组是值类型。当我们复制它们时,每个副本都相互独立。这是Swift的优点。您正在尝试做的事情需要参考,以便其他人可以看到对一个人的影响。试试这段代码。创建一个包含您的数据的 class(引用类型)。现在可以在另一个容器中看到对容器的更改。
class Person
{
var name: String
init(_ name: String) {
self.name = name
}
}
let p1 = Person("Umair")
let p2 = Person("Ali")
class Container {
var people = [Person]()
init(people: [Person]) {
self.people = people
}
}
let arr1 = Container(people: [p1, p2])
let arr2 = arr1
print(arr1.people)
print(arr2.people)
arr1.people.removeFirst()
print(arr1.people)
print(arr2.people)
即使您正在使用 Swift,您仍然可以使用 NSArray
。
根据 Apple 的文档,
NSArray is an object representing a static ordered collection, for use instead of an Array constant in cases that require reference semantics.
唯一的缺点是您必须 import Foundation
。如果您正在创建 iOS 或 Mac 应用程序,这不是问题,因为您已经依赖它了。