我有两个UIViewControllers(Master
和Detail
简单地说)。在我的Master Controller
中,我有一个tableView
,其中包含一些对象列表,并且我正在使用Detail Controller
来显示详细信息并更改这些对象的某些属性。
这似乎非常简单明了。
假设我有一个具有这种结构的对象:
class User {
var name = ""
var lastPoints:[LastPoint] = []
}
在我的Master Controller
中,将显示用户列表,在我的Detail Controller
中,我希望能够删除lastPoints
。
在didSelectRowAt
的{{1}}中,我有:
Master Controller
之后,我可以在let suVC = ShowUserViewController()
suVC.currentUser = self.usersToShow[indexPath.row]
self.navigationController?.pushViewController(suVC, animated: true)
中使用这个新变量。例如,我可以删除Detail Controller
中的最后一个点。
问题是,该currentUser
也将立即从lastPoint
的{{1}}中删除,我需要避免这种情况(而且我也想了解造成这种情况的原因是什么)这种行为:是的,在大多数情况下,这似乎是合乎逻辑的,甚至很方便,但我不记得以前的项目中的这种行为。
答案 0 :(得分:2)
这是因为User是一个类,在Swift中是引用类型。当您的详细信息控制器获取当前用户时,它将共享对主控制器中所示的完全相同的User实例的引用。由于它是同一用户,因此对lastPoints
的更改将同时反映在两个地方。
答案 1 :(得分:2)
原因很简单,类数组是引用类型,因此将其更改为
struct User {
var name = ""
var lastPoints:[LastPoint] = []
}
其中struct
是值类型