可以替代Binding现已弃用的Collection一致性的替代方案吗?

时间:2019-08-26 08:04:03

标签: collections binding swiftui

As of Xcode 11 beta 6…

  

已删除Binding结构对Collection协议的条件一致性。

按照苹果公司的建议(在该链接处)创建IndexedCollection类型,我们可以避免为ListForEach创建样板,如下所示:

public extension ForEach where Content: View {
  init<Base: RandomAccessCollection>(
    _ base: Base,
    @ViewBuilder content: @escaping (Data.Element) -> Content
  )
  where
    Data == IndexedCollection<Base>,
    Base.Element: Identifiable,
    ID == Base.Element.ID
  {
    self.init(IndexedCollection(base: base), id: \.element.id, content: content)
  }
}

这使我们从他们的例子中得到了

List(landmarks.indexed(), id: \.1.id) { index, landmark in
  Toggle(landmark.name, isOn: self.$landmarks[index].isFavorite)
}

对此:

List(landmarks) { index, landmark in
  Toggle(landmark.name, isOn: self.$landmarks[index].isFavorite)
}

但是是否可以编写另一个扩展初始化程序,从而避免使用索引和下标(self.$landmarks[index])?

我尝试使用dynamicMemberLookup,但是如果这是解决方案,那么我还没做好。

0 个答案:

没有答案