首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何制作阵列的精确副本?

如何制作阵列的精确副本?
EN

Stack Overflow用户
提问于 2015-01-07 12:31:40
回答 3查看 107.7K关注 0票数 108

我如何制作一个精确的数组副本?

我很难找到有关在Swift中复制数组的信息。

我试着使用.copy()

代码语言:javascript
复制
var originalArray = [1, 2, 3, 4]
var duplicateArray = originalArray.copy()
EN

回答 3

Stack Overflow用户

发布于 2015-01-07 13:00:58

内特是对的。如果您正在使用原始数组,那么您所需要做的就是将duplicateArray赋值给originalArray。

为了完整起见,如果您使用的是NSArray对象,则需要执行以下操作来完成NSArray的完整副本:

代码语言:javascript
复制
var originalArray = [1, 2, 3, 4] as NSArray

var duplicateArray = NSArray(array:originalArray, copyItems: true)
票数 30
EN

Stack Overflow用户

发布于 2016-01-09 04:09:42

对于普通的对象,可以做的是实现一个支持复制的协议,并使对象类实现该协议,如下所示:

代码语言:javascript
复制
protocol Copying {
    init(original: Self)
}

extension Copying {
    func copy() -> Self {
        return Self.init(original: self)
    }
}

然后是用于克隆的Array扩展:

代码语言:javascript
复制
extension Array where Element: Copying {
    func clone() -> Array {
        var copiedArray = Array<Element>()
        for element in self {
            copiedArray.append(element.copy())
        }
        return copiedArray
    }
}

就是这样,要查看代码和示例,请检查此gist

票数 16
EN

Stack Overflow用户

发布于 2020-07-14 21:49:33

如果要复制某个类对象的数组中的项。然后,你可以在不使用NSCopying协议的情况下遵循下面的代码,但是你需要有一个初始化方法,它应该接受你的对象所需的所有参数。以下是在操场上测试的示例的代码。

代码语言:javascript
复制
class ABC {
    
    var a = 0
    func myCopy() -> ABC {
        
        return ABC(value: self.a)
    }
    
    init(value: Int) {
        
        self.a = value
    }
}

var arrayA: [ABC] = [ABC(value: 1)]
var arrayB: [ABC] = arrayA.map { $0.myCopy() }

arrayB.first?.a = 2
print(arrayA.first?.a)//Prints 1
print(arrayB.first?.a)//Prints 2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27812433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档