【发布时间】:2019-12-10 23:09:23
【问题描述】:
我正在使用 ObservableObject 'DataStore',它包含对象('exampleObject')的数组('exampleList')。
@Published exampleList = [exampleObject]()
我通过@EnvironmentObject ('dataStore') 调用DataStore。
@EnvironmentObject var dataStore = DataStore()
然后我用迭代列表
ForEach(0..<dataStore.exampleList.count) { index in ....
要将 item 的元素绑定到详细视图,我这样做:
DetailView(itemBinding: $dataStore.exampleList[index])
在 Xcode11 beta 4 之前,它运行良好。从 XCode11 beta 5 开始,它仍然可以工作,但 Xcode 给了我这个警告:
'subscript(_:)' 已弃用:请参阅发行说明了解迁移路径
我尝试了更简单的东西,一个简单的@State var 包含一个字符串数组,这是同样的问题:当调用这个数组的一个元素,并尝试将值使用到 TextField 中时:
TextField("test", text: $test[0])
我收到同样的警报。
我不明白如何解决它。这是否意味着我们不再可以在数组中绑定值? 那么,我们如何迭代一个数组并绑定一个特定的项呢?
这是我关于 Stack Overflow 的第一个问题,如果我的问题很笨拙,我深表歉意... 非常感谢您的回答,我多年来一直在使用 Stack Overflow,这太棒了,我总能找到现有且有用的答案,但这是我第一次找不到任何答案,这就是我问的原因。
【问题讨论】:
-
首先,好问题。我对此表示赞同,因为我收到了与
Slider类似的警告。我发现了和你一样的东西——如果你绑定到ObservableObject中的一个数组,出了点问题(但它仍然有效),但是如果你绑定到一个本地状态变量,一切都很好(但是你如何更新模型?)。如果您想查看它,我有一个示例项目(忽略名称,这是一个老问题)。 github.com/justdfd/ListBug如果我找到答案,我会发布。 -
@dfd,感谢您的评论,我很高兴知道世界上并非只有我一个人遇到此问题。我仍然不明白为什么,因为对于具有复杂数据的模型来说,使用数组似乎是一种常见情况。对我来说,ObservableObject 的兴趣是在修改数组元素时刷新所有父视图。如果我不能再那样做了,有什么好方法?
-
这不是我今天想做的工作,但在花了一个小时(我一生中永远不会回来)之后,我找不到答案。我听了一些与苹果相关的播客,昨天一个在谈论“软件”如何落后于“硬件”,他们正在思考苹果在 9 月份可能会做什么。我的看法?由于对我来说毫无意义的更改,我的应用程序在 beta 4 和 5 中都打破了 BIG 时间。现在,我正在研究 (a) 可以发出警告的东西,并且 (b) 不知道 10 天内 beta 6 会发生什么变化。我会在此期间监控您的问题。
-
来自 beta 5 的发行说明:删除了 Binding 结构对 Collection 协议的条件一致性。 (51624798)。准确地说,它没有被删除,它已被弃用。这就是它仍然有效的原因。如果他们遵循与其他 beta 弃用相同的模式,他们可能会在 beta 6 或 7 中永久删除它。我没有时间分析替代方案。发行说明提供了一些示例,但它们似乎需要做太多的工作才能实现迄今为止如此容易的事情。我的赌注是(续)
-
我敢打赌,在 beta 6 或 7 中情况会再次发生变化。也许对 Collection 的一致性不会回来,但可能会提供一些东西。虽然它仍然有效,但我不想浪费太多时间来研究它。如果很快有另一个变化,这一切可能都是徒劳的。暂时,我想我会放过它,当他们最终删除它时我会担心。