개발/Swift
[SwiftUI] 상태 프로퍼티 @State와 @Binding 사용
leebaek
2024. 1. 30. 22:06
☆ [핵심만 골라배우는 SwiftUI 기반의 iOS 프로그래밍] 책 내용 중 기억할 내용을 정리하였습니다.
■ 상태 프로퍼티
: 상태에 대한 가장 기본적인 형태
- 뷰 레이아웃의 현재 상태(토글 버튼 활성화 여부, 텍스트 필드에 입력된 텍스트, 피커 뷰에서의 현재 선택)를 저장하기 위해서 사용된다.
- String 이나 Int 값처럼 간단한 데이터 타입을 저장하기 위해 사용된다.
□ @State 프로퍼티 래퍼
상태 프로퍼티 값이 변경되면, 프로퍼티가 선언된 뷰 계층 구조를 다시 렌더링한다. ( 뷰를 다시 그린다는 말 )
프로퍼티 값이 바뀔 때마다, 최신 값이 반영되도록 업데이트 된다.
ex ) toggle을 이용하여 버튼 클릭시 isused가 ture, false로 바뀌게 됨
Text에 isused의 상태를 넣어주었기 때문에, 그 값이 변경될 때마다 화면을 다시 렌더링해야함
import SwiftUI
struct SwiftUIView: View {
@State private var isused: Bool = false
var body: some View {
Text(isused.description)
Button(action: {
isused.toggle()
}, label: {
Text("Hit!")
})
}
}
□ @State \ @Binding 프로퍼티 래퍼
사용하고자 하는 프로퍼티가 같은 뷰에 있지 않을 경우, @Binding 프로퍼티 래퍼를 이용하여 변수를 선언해주면 된다.
ex ) 위의 예시와 동작하는 방식은 같으나, 하위 뷰에 버튼을 따로 빼서 넣어 보았음
뷰 호출 시, 상태 프로퍼티에 대한 바인딩을 전달하면 됨 !
import SwiftUI
struct SwiftUIView: View {
@State private var isused: Bool = false
var body: some View {
VStack {
Text(isused.description)
ex2View(isused: $isused)
}
}
}
struct ex2View : View {
@Binding var isused : Bool
var body: some View {
Button(action: {
isused.toggle()
}, label: {
Text("Hit!")
})
}
}
#Preview {
SwiftUIView()
}
+ 추가 )
@Binding 안 쓰고 @State를 쓰면 어떻게 될까 ??
- 아무리 버튼을 눌러도 fase -> true로 변하지 않는다 !
struct ex2View : View {
@State var isused : Bool
var body: some View {
Button(action: {
isused.toggle()
}, label: {
Text("Hit!")
})
}
}