因为对象是引用类型,而不是值类型,如果将UIView设置为另一个UIView,则视图是同一个对象.如果你修改一个,你也会修改另一个.

我有一个有趣的情况,我想在另一个视图中添加一个UIView作为子视图,然后我做一些修改,这些修改不应该影响原来的UIView.如何制作UIView的副本,以便确保将该副本添加为子视图,而不是对原始UIView的引用?

请注意,我不能以创建原始视图的方式重新创建视图,我需要一些方法来创建任意UIView个对象的副本.

推荐答案

你不能随意复制一个对象.只能复制实现NSCopying协议的对象.

但是,有一个解决方法:由于UIView可以序列化到磁盘(例如从XIB加载),所以可以使用NSKeyedArchiverNSKeyedUnarchiver创建一个描述视图的序列化NSData,然后再次反序列化以获得一个独立但相同的对象.

Swift相关问答推荐

在swift静态var扩展中,如何或可以访问和返回具体类?

SwiftUI—如何识别单词并获取视觉中的位置

SWIFT并发:合并Taskgroup和AsyncStream?

在SWIFTUI&39;S视图修改器中使用等待关键字

字典下标或运算符,如果密钥不存在,则添加指定的默认&值是SWIFT?

一种函数,用于判断变量的类型是否为在SWIFT中作为参数传递的类型

TimeZone 背后的目的

设备上ScrollView为什么会将内容高度更改为随机值,而在预览上不会? - 优化后的标题:设备上ScrollView内容高度随机变化问题解决

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

如何使一个 Reality Composer 场景中的分组对象可拖动?

有没有一种方法可以访问封闭实例ObservableObject以从属性包装器中的任何位置调用objectWillChange.send()

令人满意的 var body:协议扩展中的一些视图

在 Swift 中强制崩溃的最简单方法

Swiftwhere数组扩展

在 Swift 框架中加载资源(例如故事板)

调整文本的字体大小以适应 UIButton

为什么'nil' 与 Swift 3 中的 'UnsafePointer' 不兼容?

为 UIImagePicker 设置委托返回错误

TabView 在切换选项卡时重置导航堆栈

快速延迟加载属性