Да, есть разница:
Для оператора Range<Int>
(..<
) существует явное расширение ForEach
, которое указывает связанные типы
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
extension ForEach where Data == Range<Int>, ID == Int, Content : View {
, тогда как для ClosedRange<Int>
(...
) такого не существует, и это считается коллекцией более обобщенным c
/// A structure that computes views on demand from an underlying collection of
/// of identified data.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct ForEach<Data, ID, Content> where Data : RandomAccessCollection, ID : Hashable {
, поэтому требуется явное предоставление Введите идентификатор, как показано ниже
ForEach(0...2, id: \.self) {
, или вы можете объявить свой собственный добавочный номер
extension ForEach where Data == ClosedRange<Int>, ID == Int, Content : View {
public init(_ data: ClosedRange<Int>, @ViewBuilder content: @escaping (Int) -> Content) {
self.init(data, id: \.self, content: content)
}
}
, а затем просто использовать
ForEach(0...2) {