본문 바로가기
Ios/Swift UI

@Binding 과 .constant에 대해서 알아봅시다

by 잘먹는 개발자 에단 2024. 7. 22.

* 오늘도 마찬가지로 여전히 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 값을 제공합니다.

 

이렇게 되면 뷰가 제대로 작동하는지 확인할 수 있고, 상태가 변경되지 않도록 보장합니다.