Lazy는 기본적으로 바로 호출이 되지 않고
특정 처리 이후에 view에 표시된다.
그래서 메인에 바로 원하는 데이터가 호출이 되지 않아서
struct GridStack<Content: View>: View {
let rows: Int
let columns: Int
let content: (Int, Int) -> Content
var body: some View {
VStack {
ForEach(0 ..< rows, id: \.self) { row in
HStack {
ForEach(0 ..< columns, id: \.self) { column in
content(row, column)
}
}
}
}
}
init(rows: Int, columns: Int, @ViewBuilder content: @escaping (Int, Int) -> Content) {
self.rows = rows
self.columns = columns
self.content = content
}
}
따로 그리드 형태를 선언해서 가져다 쓰기로 했다.
GridStack(rows: Int(ceil(Double(self.arr_list.count / 3))) + 1, columns: 3) { row, col in
if(self.arr_list.count > row * 3 + col) {
ZStack {
WebImage(url: URL(string: self.arr_list[row * 3 + col].gif))
.resizable()
.frame(height: 120)
.padding(3)
WebImage(url: URL(string: self.arr_list[row * 3 + col].img))
.resizable()
.frame(width: 45, height: 45)
.padding(EdgeInsets(top: -60, leading: -57, bottom: 0, trailing: 0))
}
} else {
Image(systemName: "")
.resizable()
.frame(height: 120)
.padding(3)
}
}
index range of 에러 때문에 애좀 먹었던 문제
변수명 잘 확인해야겠다.
출처