gpt4 book ai didi

arrays - Swift 4 按值复制内部有数组的对象数组

转载 作者:行者123 更新时间:2023-11-30 10:54:30 27 4
gpt4 key购买 nike

我试图了解 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 { $0.copy() } as! [Project]

为了实现这一点,我实现了 NSCopying通过以下方式对两个类进行协议(protocol):

extension Project: NSCopying {
public func copy(with zone: NSZone? = nil) -> Any {
let teamCopy = self.team?.map { $0.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 { $0.copy() }运行时,应用程序会卡住,就像在循环一样,并且显示 Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee5a61ff8) let teamCopy = self.team?.map { $0.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
}
}

关于arrays - Swift 4 按值复制内部有数组的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com