美文网首页
(Swift) 实现深拷贝

(Swift) 实现深拷贝

作者: 布呐呐u | 来源:发表于2022-11-14 18:35 被阅读0次

方式一)遵循 NSCopying 系统协议

  • 在自定义类中,实现该方法
func copy(with zone: NSZone? = nil) -> Any
  • example TestA
class TestA: NSCopying {
    var name: String
    init(name: String) { self.name = name }
    
    func copy(with zone: NSZone? = nil) -> Any { TestA(name: name) }
}

方式二)遵循 Copying 自定义协议

  • 在自定义类中,实现该方法
protocol Copying { init(obj: Self) }
  • example TestB
protocol Copying { init(obj: Self) }
extension Copying { var copy: Self { Self.init(obj: self) } }

class TestB: Copying {
    var name: String
    init(name: String) { self.name = name }
    
    required init(obj: TestB) { self.name = obj.name }
}

方式三)遵循 Codable 系统协议

  • 在自定义类中,遵循 Codable 协议
  • 自定义一个遵循 Codable 协议的泛型方法
func copy<T: Codable>(_ obj: T) -> T?
  • example TestC
func codableCopy<T: Codable>(_ obj: T) -> T? {
    do{
        let jsonData = try JSONEncoder().encode(obj)
        return try JSONDecoder().decode(T.self, from: jsonData)
    }
    catch {
        print("Decode failed. \(error)"); return nil
    }
}

class TestC: Codable {
    var name: String
    init(name: String) { self.name = name }
}

相关文章

  • (Swift) 实现深拷贝

    方式一)遵循 NSCopying 系统协议 在自定义类中,实现该方法 example TestA 方式二)遵循 C...

  • iOS基础知识点(网络摘抄)

    1.父类实现深拷贝时,子类如何实现深拷贝。父类没有实现深拷贝时,子类如何实现深拷贝? 深拷贝同浅拷贝的区别:...

  • 深拷贝、浅拷贝

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 面试题整理

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • iOS面试基础一

    #父类实现深拷贝时,子类如何实现深度拷贝.父类没有实现深拷贝时,子类如何实现深度拷贝.# <(1)深拷贝同浅拷贝的...

  • 0. iOS面试题基础篇

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS基础知识点01

    1. 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 1.1 深拷贝同浅拷贝...

  • iOS知识点(一)

    1.1 父类实现深拷贝时,子类如何实现深度拷贝。 父类没有实现深拷贝时,子类如何实现深度拷贝。深拷贝同浅拷贝的区别...

  • swift 深拷贝浅拷贝~实现class的深拷贝

    换了新公司,开启了swift的大门,任何语言的学习都需要项目的支撑,以前学习swift只是停留在看书,看语法~来的...

  • 面试 (一) : 基础篇

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...

网友评论

      本文标题:(Swift) 实现深拷贝

      本文链接:https://www.haomeiwen.com/subject/fralxdtx.html