티스토리 뷰
SwiftUI Static method 'buildBlock' requires that 'Int' conform to 'View'
JeroIOS 2022. 11. 1. 01:03애니메이션 그래프를 만드려고 버튼을 누르면 toggle 활성화에 따라
for문을 돌려 배열안의 요소를 변경하려고 버튼 바깥에 로직을 작성했는데
Static method 'buildBlock' requires that 'Int' conform to 'View'라는 에러가 났다.
static 메서드 'buildBlock'을 사용하려면 'Int'가 'View'를 준수해야 합니다.
내가 뷰를 작성해야할 자리에 로직을 작성해서 에러가 난 것 같다.
그래서 로직을 지운 후에 아래 function으로 빼서 버튼 action 부분에 이 함수를 호출했더니 에러가 사라졌지만,
No exact matches in call to instance method ‘append’라는 에러가 났다.
배열의 append하고자하는 타입이 서로 달라서 그런 것 같아서 타입을 맞춰주었더니 에러 해결을 했다.
위 에러 해결을 하자 No exact matches in call to initializer 라는 에러가 났는데
if isResultToggleOn {} 안에 ForEach문에서 범위 지정한 배열과 데이터를 불러오는 배열이 달라서
이니셜라이저에 대한 호출에서 정확히 일치하는 항목이 없다고 뜨는 것 같다.
ForEach (0 ..< numArray.count, id: \.self)와
Rectangle().frame(width: 30, height: 200 - CGFloat(resultData.resultChart[index]))
Rectangle().frame(width: 30, height: 200 - CGFloat(numArray[index]))
frame에서 height을 설정한 배열이 달라서 이 부분을 맞추었더니 해결이 되었다.
var body: some View {
VStack {
HStack {
Button {
isResultToggleOn.toggle()
for _ in (1 ..< resultData.resultChart.count) {
numArray.append(0)
}
} label: {
Text("결과보기")
}
}
if isResultToggleOn {
HStack (alignment: .bottom) {
ForEach (0 ..< numArray.count, id: \.self) { index in
VStack {
Rectangle()
.fill(.clear)
.frame(width: 30, height: 200 - CGFloat(numArray[index]))
Rectangle()
.fill(.yellow)
.frame(width: 30, height: CGFloat(numArray[index]))
.animation(.spring(response: 1.7, dampingFraction: 0.7, blendDuration: 5), value: resultData.resultChart)
.onAppear {
withAnimation(.easeInOut(duration: 3).repeatCount(1)) {
numArray[index] = Int( resultData.resultChart[index])
}
}
Text("\(index + 1)번째 결과")
.font(.caption)
Text("\(Int(numArray[index]))")
.font(.caption)
}
}
}
}
}
}