对象深拷贝

背景:
在不希望更改传入数据源的情况下,可以通过深拷贝的情况,创建一个新的数据源。
(1)方法 1:
深拷贝对象的类文件需要遵守 NSCopying 协议,重写 copy(with zone: NSZone? = nil) 方法,并且将属性一一赋值。
(2)方法 2:
直接创建一个新的model(结合HandyJson)

方法一:

  1. GroupLevelListModel.swift文件
import UIKit

class GroupLevelListModel: BaseModel,NSCopying {
    
    func copy(with zone: NSZone? = nil) -> Any {
        let model = GroupLevelListModel()
        model.level = level
        model.student_list = [GroupLevelStudentListModel]()
        for stu in student_list {
            let newStu = stu.copy() as! GroupLevelStudentListModel
            model.student_list.append(newStu)
        }
        return model
    }
    
    var level: String?
    var student_list = [GroupLevelStudentListModel]()

}
  1. GroupLevelStudentListModel.swift文件:
import UIKit

class GroupLevelStudentListModel: BaseModel,NSCopying {

    func copy(with zone: NSZone? = nil) -> Any {
        let model = GroupLevelStudentListModel()
        model.name = name
        model.portrait = portrait
        model.student_username = student_username
        model.exist_group = exist_group
        model.isSelected = isSelected
        return model
    }
    
    var name: String?
    var portrait: String?
    var student_username: String?
    var exist_group: String?
    var isSelected = false
}

方法二:

//copy对象,不能直接指向这个对象
let model = JSONDeserializer<DynamicListModel>.deserializeFrom(dict: model?.toJSON() as NSDictionary?)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,913评论 1 32
  • 开发中会遇到控制器A传递model到控制器B的情况,但是如果直接赋值的话,控制器B更改了model数据,控制器Am...
    杨帅iOS阅读 12,487评论 9 7
  • 写在前面 各类技术论坛关于深拷贝的博客有很多,有些写的也比我好,那为什么我还要坚持写这篇博客呢,之前看到的一篇博客...
    心_c2a2阅读 21,457评论 3 18
  • 不纠缠,是我最后能为你做的,此生再也不见了吧,再见也是陌路了吧! 回忆是最可怕的东西,它让我更清醒,回望我们的从前...
    SS离开阅读 2,635评论 0 0
  • 清晨,光线还并不清晰的时候,母亲便开始了一天的忙碌。父亲要去上班,我们几个要去上学。为了不让我们空着肚子出门,她每...
    e1215d1d3131阅读 1,891评论 0 1

友情链接更多精彩内容