Swift 4 按值复制对象数组,其中包含数组
Swift 4 Copy an array of objects by value which have array inside
我想了解 copy()
函数在 Swift 中的工作原理 4. 我有两个 类 的结构如下:
class Project {
var id: Int
var name: String
var team: [Person]?
init(id: Int, name: String, team: [Person]?) {
self.id = id
self.name = name
self.team = team
}
}
class Person {
var id: Int
var name: String
var project: Project?
init(id: Int, name: String, project: Project?) {
self.id = id
self.name = name
self.project = project
}
}
在我的程序中,我有一个项目数组,我想做的是通过以下方式在数组中创建值的副本:
// arrProjects is some array of projects.
let projectsCopy = arrProjects.map { [=12=].copy() } as! [Project]
为了实现这一点,我已经通过以下方式为 类 实现了 NSCopying
协议:
extension Project: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let teamCopy = self.team?.map { [=13=].copy() } as! [Person]?
return Project(id: self.id, name: self.name, team: teamCopy)
}
}
extension Person: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let projectCopy = self.project?.copy() as! Project?
return Person(id: self.id, name: self.name, project: projectCopy)
}
}
但是,当我 运行 代码和 arrProjects.map { [=16=].copy() }
运行s 时,应用程序冻结,就好像它在循环一样,并且 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee5a61ff8)
错误被抛出let teamCopy = self.team?.map { [=18=].copy() } as! [Person]?
行。
知道我哪里出错了吗?
你不应该在 public func copy(with zone: NSZone? = nil) -> Any {
的定义中使用 copy()
您正在创建一个无限循环。
extension Project: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let copy = Project(id: self.id, name: self.name, team: self.team)
return copy
}
}
extension Person: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let copy = Person(id: self.id, name: self.name, project: self.project)
return copy
}
}
我想了解 copy()
函数在 Swift 中的工作原理 4. 我有两个 类 的结构如下:
class Project {
var id: Int
var name: String
var team: [Person]?
init(id: Int, name: String, team: [Person]?) {
self.id = id
self.name = name
self.team = team
}
}
class Person {
var id: Int
var name: String
var project: Project?
init(id: Int, name: String, project: Project?) {
self.id = id
self.name = name
self.project = project
}
}
在我的程序中,我有一个项目数组,我想做的是通过以下方式在数组中创建值的副本:
// arrProjects is some array of projects.
let projectsCopy = arrProjects.map { [=12=].copy() } as! [Project]
为了实现这一点,我已经通过以下方式为 类 实现了 NSCopying
协议:
extension Project: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let teamCopy = self.team?.map { [=13=].copy() } as! [Person]?
return Project(id: self.id, name: self.name, team: teamCopy)
}
}
extension Person: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let projectCopy = self.project?.copy() as! Project?
return Person(id: self.id, name: self.name, project: projectCopy)
}
}
但是,当我 运行 代码和 arrProjects.map { [=16=].copy() }
运行s 时,应用程序冻结,就好像它在循环一样,并且 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee5a61ff8)
错误被抛出let teamCopy = self.team?.map { [=18=].copy() } as! [Person]?
行。
知道我哪里出错了吗?
你不应该在 public func copy(with zone: NSZone? = nil) -> Any {
的定义中使用 copy()
您正在创建一个无限循环。
extension Project: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let copy = Project(id: self.id, name: self.name, team: self.team)
return copy
}
}
extension Person: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let copy = Person(id: self.id, name: self.name, project: self.project)
return copy
}
}