通过对一个对象进行copy创建出一个新的对象。
在swift中我们可以创建一个copying协议,某个类遵守该协议后,便可以使用copying协议中的copy方法,copy出一个新的对象。
copying协议:
public protocol Copying: AnyObject {
// 声明 required initializer
init(_ prototype: Self)
}
extension Copying {
// 通常不直接调用初始化器,而是调用 copy() 方法
public func copy() -> Self {
return type(of: self).init(self)
}
}
遵守copying协议的类
// Monster 类遵守 Copying 协议
public class Monster: Copying {
public var health: Int
public var level: Int
public init(health: Int, level: Int) {
self.health = health
self.level = level
}
public required convenience init(_ monster: Monster) {
self.init(health: monster.health, level: monster.level)
}
}
我们需要将实现的协议方法init(_ prototype: Self)声明成required。
demo地址:
https://github.com/pro648/BasicDemos-iOS/tree/master/PrototypePattern
网友评论