已删除Binding结构对Collection协议的条件一致性。
按照苹果公司的建议(在该链接处)创建IndexedCollection
类型,我们可以避免为List
和ForEach
创建样板,如下所示:
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
,但是如果这是解决方案,那么我还没做好。