해결된 질문
24.07.03 18:30 작성
·
97
·
수정됨
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
2024. 07. 03. 22:23
아 어떤 상황인지 이해했습니다.
하위뷰의 변수와 상위뷰의 변수를 같이 변경하고 싶으면 하위 변수에 @State를 붙이면 안됩니다.
@State를 안 붙이면 하위의 전달받은 변수가 상위변수의 값과 연결되지만
만약에 @State를 붙이면 하위의 변수가 새로운 저장공간을 생성하기 때문에 연결이 끊어져버려서 그렇습니다.
또 의문이 있으시면 질문 주세요~! 강의 구매해주셔서 감사드립니다!
0
2024. 07. 03. 19:03
gatewaykim님 안녕하세요.
제 환경에서는 두 코드다 정상작동하는데요.
혹시 xcode를 한번 껐다 켜보시겠어요?
하위뷰에 @State가 있어도 사실 문제될게 없는거 같거든요.
0
2024. 07. 03. 21:25
오잉? 둘 다 되나요?
저는 xcode 닫았다가 다시 열고 시뮬레이터로도 돌려보았으나
변수 하나의 값만 올라갑니다