ForEach - это структура , которая вычисляет представления по требованию из базового набора идентифицированных данных, НЕ все oop.
Как создать гексагональную сетку? Ниже приведен один из возможных подходов, в котором я попытался показать вам, как использовать ForEach
и декларативный синтаксис SwiftUI.
import SwiftUI
struct Hexagon: Shape {
func path(in rect: CGRect) -> Path {
Path { (path) in
path.move(to: .init(x: rect.midX, y: rect.minY))
path.addLine(to: .init(x: rect.maxX, y: (rect.minY + rect.midY) / 2 ))
path.addLine(to: .init(x: rect.maxX, y: (rect.maxY + rect.midY) / 2 ))
path.addLine(to: .init(x: rect.midX, y: rect.maxY))
path.addLine(to: .init(x: rect.minX, y: (rect.maxY + rect.midY) / 2 ))
path.addLine(to: .init(x: rect.minX, y: (rect.minY + rect.midY) / 2 ))
path.closeSubpath()
}
}
}
struct ContentView: View {
var body: some View {
VStack(spacing: -10) {
ForEach(0 ..< 3) { j in
HStack(spacing: 5) {
ForEach(0 ..< 4) { i in
Hexagon()
.fill(Color.yellow)
.overlay(
Hexagon()
.stroke(Color.red, lineWidth: 5)
)
.frame(width: 50, height: 60)
}
}
HStack(spacing: 5) {
ForEach(0 ..< 3) { i in
Hexagon()
.stroke(Color.blue, lineWidth: 5)
.frame(width: 50, height: 60)
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
и вот результат ![enter image description here](https://i.stack.imgur.com/PMfys.png)
Здесь для простоты фиксированы интервалы и параметры кадра, вам лучше рассчитать правильные числа.
init(Range<Int>, content: (Int) -> Content)
Доступно, когда для параметра «Данные» задано значение «Диапазон», для параметра «Идентификатор» задано значение «Интервал», а содержимое соответствует представлению.
Вы пытались использовать
init(Data, id: KeyPath<Data.Element, ID>, content: (Data.Element) -> Content)
Доступно, когда Content соответствует View.
и, наконец, у нас нет никакой идеи, какой тип возвращает вашу функцию шестиугольника, это может быть Shape, но Shape является протоколом, и это может создать проблемы. Если это Shape, попробуйте определить тип возвращаемого значения как некоторый Shape.
Да, отчеты об ошибках компилятора все еще не очень удобны с SwiftUI