swift - 不同 UIViewController 中变量的奇怪行为
问题描述
我有两个 UIViewControllers(简单地说)Master
。Detail
在我的Master Controller
我有tableView
一些对象列表,我Detail Controller
用来显示细节和更改这些对象的一些属性。
它看起来非常简单明了。
假设我有一个具有这种结构的对象:
class User {
var name = ""
var lastPoints:[LastPoint] = []
}
在我的Master Controller
我将显示用户列表,在我的Detail Controller
我希望能够删除lastPoints
.
所以在didSelectRowAt
我的Master Controller
我有:
let suVC = ShowUserViewController()
suVC.currentUser = self.usersToShow[indexPath.row]
self.navigationController?.pushViewController(suVC, animated: true)
之后我就可以在我的Detail Controller
. 例如,我可以删除currentUser
.
问题是,这lastPoint
也将立即被删除self.usersToShow[indexPath.row]
,Master Controller
我需要避免这种情况(而且我想了解这种行为的原因是什么:是的,在大多数情况下这似乎合乎逻辑甚至方便,但我可以'不记得以前项目中的这种行为)。
解决方案
原因很简单,类数组是引用类型,因此将其更改为
struct User {
var name = ""
var lastPoints:[LastPoint] = []
}
struct
值类型在哪里
推荐阅读
- vue.js - 为什么 Vuetify Autocomplete 不选择正在设置的数据?
- reactjs - 在应用启动时在后台初始化/急切加载 React 组件以供以后使用
- node.js - 如何在 Node JS 中使用 Google Maps Circle、Rectangle 和 Polygon?
- qt - 当 QML 滚动条位于底部并且窗口高度被调整大小时,它不会更新
- java - JTabbedPane 直到我最小化窗口才显示
- javascript - Promise allSettled 不是函数
- tracking - 如何跟踪和展示网络流量的载体?
- docker - Docker容器中的python编码如何调用安装在其他服务器上而不是Docker容器本身的Gurobi求解器?
- apache-kafka - 即使之前的重试尝试成功,Kafka 重试机制也不会停止
- rust - Tracing 中 Span 的访问字段值