* 오늘도 마찬가지로 여전히 Swift 생초보입니다.
* Blazor라는 걸 공부하다가 왔는데 으우 너무 스트레스 받았어요.
Swift UI Tutorial 3 : 사용자 입력처리를 보는데 다음과 같은 코드가 나옵니다.
import SwiftUI
struct FavoriteButton: View {
@Binding var isSet : Bool
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
#Preview {
FavoriteButton(isSet: .constant(true))
}
이런 코드인데, 몇가지 생소한 표현이 보입니다.
- 1. @Binding ( 첫인상: 뭘 묶지? js의 bind...? )
- 2. .constant ( 첫인상 : 상수.같은건가..? 그리고? )
( 여담이지만, 스위프트에는 다른언어에 없는 생소한 키워드가 많은 것 같아요... 좀 많이 ... )
같이 알아봅시다.
1. @Binding
- Swift UI에서 부모 뷰로부터 전달받은 상태를 자식 뷰에서 읽고 수정할 수 있게 하는 속성
- 즉, 부모뷰가 소유하고 있는 상태 값을 자식 뷰에서도 접근하고 변경할 수 있습니다.
- @Binding을 사용하면 상태가 공유되어, 어느 한 곳에서 상태가 변경되면 해당 상태를 사용하는 모든 뷰가 업데이트 된다.
예시 코드를 봅시다.
import SwiftUI
struct ParentView : View{
@State private var isFavorite : Bool = false
var body : some View{
// isSet에 isFavorite 상태 전달
FavoriteButton(isSet : $isFavorite)
}
}
struct FavoriteButton : View{
@Binding var isSet : Bool
var body : some View{
Button(action : {
isSet.toggle()
}) {
Text(isSet ? "Unfavorite" : "Favorite")
}
}
}
#Preview{
ParentView()
}
- 부모뷰에서 @State를 사용해서 isFavorite 상태를 관리합니다.
- 자식뷰에서는 @Binding을 사용해서 부모뷰로부터 isFavorite 상태를 바인딩 받습니다.
- 자식 뷰는 버튼이 클릭될 때마다 isSet 값을 토클하여 상태를 변경합니다.
2. .constant
- Constant는 SwiftUI에서 바인딩된 값이 변경되지 않도록 고정된 값을 제공합니다.
- 주로 미리보기나 간단한 테스트 목적으로 사용됩니다. 이를 통해서 뷰를 간단하게 초기화할 수 있다.
예를 들어서, FavoriteButton을 미리보기에서 테스트 하려면 실제 상태를 전달하는 대신 고정된 값을 사용할 수 있습니다.
#Preview{
FavoriteButton(isSet : .constant(true))
}
여기서 .constant(true)는 isSet에 고정된 true 값을 제공합니다.
이렇게 되면 뷰가 제대로 작동하는지 확인할 수 있고, 상태가 변경되지 않도록 보장합니다.
'Ios > Swift UI' 카테고리의 다른 글
이것저것 Swift 메모용(찾아갈만한게 있을 수도 있고 없을 수도 있어요) (3) | 2024.07.23 |
---|---|
@Environment로 커스템 데이터모델을 환경에서 가져오기 (4) | 2024.07.22 |
키 패스 KeyPath 에 대해 알아봅시다 (2) | 2024.07.19 |
@Observable, @ObservedObject 를 알아봅시다 (0) | 2024.07.19 |
계산된 속성 (0) | 2024.07.18 |