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

标签 arrays swift copy nscopying

我试图了解 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/

相关文章:

swift - 在 Swift 中比较两个对象

ios - 将目标从一个 Xcode 项目复制到另一个?

python - PyTorch 复制张量的首选方式

c - 如何使用连接两个动态字符串生成的字符串动态引用数组?

ios - 表格单元格约束无法正确加载

javascript - 合并具有相似元素的数组

ios - 在 Collection View 的容器 View 中呈现 View Controller didSelectItemAtIndexPath swift

python - 如何在Python中仅复制嵌套字典的键结构?

php - 对数组的引用在 PHP 中未按预期工作

c - 为什么使用不同的循环会得到不同的输出?