하나의 view 안에서 변경되는 변수값을 확인하여 화면을 다시 보여준다.
SwiftUI는 struct는 값 타입이여서 struct내의 값을 변경할 수 없으며, 언제든지 삭제되거나 재생성된다.
따라서, @State
를 제공해 struct내의 값을 변경할 수 있게 해준다.
단, String, Int, Bool과 같은 간단한 타입에만 사용되는 것이 좋다.
일반적으로 @State 변수는 하나의 view에서만 사용되므로 private으로 선언되고, 다른 view와 공유되지 않는다.
다른 view와 값을 공유하고 싶다면, @Binding
, @ObservedObject
, @EnvironmentObject
사용한다.
import SwiftUI
struct ContentView: View {
@State private var heartCount = 0
var buttonImage: String {
if heartCount > 0 {
return "heart.fill"
} else {
return "heart"
}
}
var textColor: Color {
if heartCount > 0 {
return Color.red
} else {
return Color.black
}
}
var body: some View {
VStack {
Button {
heartCount += 1
} label: {
// 형태
HStack {
Image(systemName: buttonImage)
.foregroundColor(Color.red)
Text("\(heartCount)명이 좋아합니다.")
.foregroundColor(textColor)
}
}
}
}
}