코드네임 :
🍎 2주차 워크북 본문
상태 프로퍼티 : 뷰의 데이터 변화 관리, 상태 변경될떄까지 UI를 자동으로 업뎃하는 역할

// 상위 뷰
import SwiftUI
struct ContentView: View {
@State private var isClicked: Bool = false
var body: some View {
VStack{
Text("현재 State 변수 값: \(isClicked)")
CustomButton(isClicked: $isClicked)
}
}
}
#Preview {
ContentView()
}
// 하위 뷰
import SwiftUI
struct CustomButton: View {
@Binding var isClicked: Bool
init(isClicked: Binding<Bool>) {
self._isClicked = isClicked
}
var body: some View {
Button(action: {
isClicked.toggle()
print("하위 뷰에서 값 변경함 : \(isClicked)")
} ,label:{
Text("상위 뷰의 값 State 값을 변경")
})
}
}
but!!! State의 단점

⬇️ 해결법 Observable 객체
@ObservedObject : 뷰가 직접 상태를 관리하는 것이 아니라, 상태를 따로 관리하는 객체를 만들고 그 변화를 감지하여 UI를 자동으로 갱신하는 방식 사용 (게시자와 구독자 간의 관계 사용하여 구축)
@Published 속성 래퍼

but 단점!!
뷰가 렌더링될 떄 기존의 상태를 유지하는것이 아닌 새로운 객체를 참조할 가능성이 있어 기존상태가 초기화 될 위험 존재

⬇️
@StateObject


>> 최근의 방식 @Observable macro
/* viewModel */
import Foundation
@Observable
class CounterViewModel {
var count = 0
}
>> @Bindable 방식
@Observable 매크로가 걸려있을때만 사용 가능

EnvironmentalObject
동일한 전역객체를 사용한다
( =• 상위 View(부모)에서 하나의 UserViewModel 인스턴스를 만든 다음
• 여러 하위 View(자식)에서 그 하나의 인스턴스를 같이 가져다 쓰는 것이야.)


@AppStorage

@AppStorage("username") var username: String = "Guest"
위 코드는 기본 형태입니다. “userName”이라는 키에 해당하는 값이 **UserDefaults**에 저장됩니다.
앱을 종료하고 다시 실행해도 “userName” 키의 값은 유지 됩니다.


GeometryReader
GeometryReader는 뷰의 크기와 위치를 동적으로 계산할 수 있는 SwiftUI의 강력한 도구입니다.
뷰의 부모 컨테이너 크기에 따라 동적으로 레이아웃을 조정할 수 있도록 도와줍니다.

'👥Club > 🍀UMC🍀' 카테고리의 다른 글
🍎 2주차 문법 - 연산자, 조건문과 반복문, 배열 그리고 옵셔널 (0) | 2025.03.26 |
---|---|
🍎 2주차 실습 (0) | 2025.03.25 |
🪶 깃허브에 올릴 때.. (0) | 2025.03.23 |
🍎 1주차 과제 (0) | 2025.03.20 |
🍎 1주차 워크북 - 문법 (이거 써야해) (0) | 2025.03.19 |