🔥 UIKit의 경우 데이터를 암시적 종속성이 생기게 됨
→ 데이터가 변경되면 이를 바라보는 View에 새로운 값을 반영하도록 업데이트하기 때문에 오류가 날 수 있음
→ 위 사진처럼 Dependency를 관리하는 것은 어렵다
🍀 SwiftUI는 Derived Value를 계산하여 종속성을 자동으로 관리하기 때문에 이러한 오류가 나지 않음
애니메이션이 사라지는 동안 사용자가 확대 버튼을 탭하면 activity indicator가 멈춤
→ 이는 Source of Truth를 업데이트한 후, UI를 파생시켜야하는데
이벤트 handler callback에서 subivew를 직접 변경하여 생기는 문제임
🤪 SwiftUI는 body만 구현하면 돼 짱이지?
struct RoomDetail: View {
let room: Room
@State private var zoomed = false
var body: some View {
ZStack(alignment: .topLeading) {
Image(room.imageName)
.resizable()
.aspectRatio(contentMode: zoomed ? .fill: .fit)
.navigationBarTitle(Text(room.name), displayMode: .inline)
.tapAction {
// animation duration을 줄 수 있음
withAnimation(.basic(duration: 2)) { self.zoomed.toggle() }
}
// 투명 frame을 깔아서 Image의 범위를 늘림
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
Image(systemName: "video.fill")
.font(.title)
.padding(.all)
// 애니메이션 transition과 동일
.transition(.move(edge: .leading))
}
}
}