SwiftUI -  @State

백마금편·2022년 5월 11일
0

Swift

목록 보기
5/7
post-thumbnail

@State

하나의 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)
                }
            }
   
        }
        
    }
}
profile
뭐 어떻게 잘 되겠지

0개의 댓글