0%

Swift对象拷贝

Swift对象拷贝

方法一:实现NSCopying协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Resume: NSObject, NSCopying {
var name: String
var sex: String?
var age: String?
var timeArea: String?
var company: String?

//必须要有一个required的初始化方法
required init(name: String) {
self.name = name
}

func copy(with zone: NSZone? = nil) -> Any {
let obj = type(of: self).init(name: name)
obj.sex = sex
obj.age = age
obj.timeArea = timeArea
obj.company = company
return obj
}
}

使用:
let ben = Resume.init(name: "本初")
var shu = ben.copy() as! Resume

方法二:实现自定义拷贝协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protocol Copyable {
func copied() -> Self
}

class Book: Copyable {
var name: String
var author: String?
var publish: String?

//必须要有一个required的初始化方法
required init(name: String) {
self.name = name
}

func copied() -> Self {
let obj = type(of: self).init(name: name)
obj.name = name
obj.author = author
obj.publish = publish
return obj
}
}

使用:
let sanguo = Book.init(name: "three of kingdom")
let book = sanguo.copied()

觉得文章有帮助可以打赏一下哦!