동영상에서는 별 이미지를 return하는 방식을 사용하지만, 더 간단하게 구현해볼 수 있어서 다르게 구현해봤다.
똑같이 @Binding한 rating
을 받아와 그 수만큼 별 모양 버튼을 노란색으로 표현하고 나머지는 회색으로 표현한다. 그리고 각 버튼을 클릭하면 rating
값을 수정한다.
struct RatingView: View {
@Binding var rating: Int
let maxRating = 5
var body: some View {
HStack {
ForEach(1..<maxRating + 1) { i in
Button(action: {
rating = i
}, label: {
Image(systemName: "star.fill")
.foregroundColor(i > rating ? .black.opacity(0.2) : .yellow)
})
.buttonStyle(.plain)
}
}
}
}
나머지는 sheet로 AddBookView
로 이동하고 modelContext에 새로운 book을 저장하고, books
에서 정보를 가져와 list로 나타내어 완성했다.
깃헙 링크