• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

@State 관련 질문입니다

24.07.03 18:30 작성 24.07.03 18:32 수정 조회수 39

1

//정상 작동 하지 않는 코드

import SwiftUI

struct MiniView: View {
    @State var numb: Int
    var body: some View {
        Text("\(numb)")
            .padding()
    }
}

struct ContentView: View {
    @State var number: Int = 0
    var body: some View {
        VStack {
            Text("\(number)")
        }
        
        Button(action: {
            number += 1
        }, label: {
            number%2 == 0 ? Text("짝") : Text("홀")
        })
        
        MiniView(numb: number)
    }
}

#Preview {
    ContentView()
}

위의 코드는 작동하지 않습니다.

 

하지만 여기서

MiniView 아래 numb 변수의 @State 를 지워주면

정상 작동합니다. (아래코드)

 

이유가 뭘까요.. ㅜㅠ ??

 

//정상 작동 하는 코드

import SwiftUI

struct MiniView: View {
    var numb: Int
    var body: some View {
        Text("\(numb)")
            .padding()
    }
}

struct ContentView: View {
    @State var number: Int = 0
    var body: some View {
        VStack {
            Text("\(number)")
        }
        
        Button(action: {
            number += 1
        }, label: {
            number%2 == 0 ? Text("짝") : Text("홀")
        })
        
        MiniView(numb: number)
    }
}

#Preview {
    ContentView()
}

답변 3

·

답변을 작성해보세요.

1

아 어떤 상황인지 이해했습니다.

 

하위뷰의 변수와 상위뷰의 변수를 같이 변경하고 싶으면 하위 변수에 @State를 붙이면 안됩니다.

@State를 안 붙이면 하위의 전달받은 변수가 상위변수의 값과 연결되지만

만약에 @State를 붙이면 하위의 변수가 새로운 저장공간을 생성하기 때문에 연결이 끊어져버려서 그렇습니다.

 

또 의문이 있으시면 질문 주세요~! 강의 구매해주셔서 감사드립니다!

0

gatewaykim님 안녕하세요.

제 환경에서는 두 코드다 정상작동하는데요.

image

혹시 xcode를 한번 껐다 켜보시겠어요?

하위뷰에 @State가 있어도 사실 문제될게 없는거 같거든요.

 

gatewaykim님의 프로필

gatewaykim

질문자

2024.07.03

오잉? 둘 다 되나요?

저는 xcode 닫았다가 다시 열고 시뮬레이터로도 돌려보았으나

변수 하나의 값만 올라갑니다

image

gatewaykim님의 프로필

gatewaykim

질문자

2024.07.03

(저기 파란색 "짝" 버튼을 눌렀을 때 숫자 카운트가 둘다 올라가야 해요)

0

gatewaykim님의 프로필

gatewaykim

질문자

2024.07.03

강의를 다시 차근 차근 돌려보니...

@State 변수는 선언된 곳에서만 값이 수정될 수 있기 때문이다

맞나요?

채널톡 아이콘