init 함수가 없는 구조체에 인자가 들어갈 수 있는 이유가 궁금합니다.
"ProfileView(viewModel: ProfileViewModel(user: user))"
ProfileView에는 init함수가 존재하지 않지만
viewModel을 인자로 받아서 생성자를 호출할 수 있는 이유가 무엇인지 궁금합니다.
viewModel에 @state를 사용했기 때문일까요?
"구조체에 @state변수가 있다면 해당 구조체를 새로 만들 때 인자로 부여할 수 있다."
이렇게 이해하면 될까요??
@state에 대해 설명부탁드립니다
답변 1
0
제승욱님 안녕하세요!
뷰에 인자를 넣어주는것은 @State와는 상관이 없습니다.
아래 코드처럼 하위뷰의 @State가 없고 프로퍼티(전달받을인자)만 선언되도 ChildView(전달받을인자:) 이런식으로 인자를 전달해줄 수 있습니다.
import SwiftUI
struct ContentView: View {
var body: some View {
ChildView(전달받을인자: "이 문자열을 전달")
}
}
struct ChildView: View {
var 전달받을인자: String
var body: some View {
Text("\(전달받을인자)")
}
}
struct에서 init은 생략될 수 있습니다.
init이 없어도 인자를 전달할 수 있는 이유는 structs는 기본 init을 자동으로 제공해줍니다.
따라서 아래 init을 명시해주는 코드와 1번에서 제공하는 코드는 같은 코드입니다.
struct ContentView: View {
var body: some View {
ChildView(전달받을인자: "이 문자열을 전달")
}
}
struct ChildView: View {
var 전달받을인자: String
init(전달받을인자: String) {
self.전달받을인자 = 전달받을인자
}
var body: some View {
Text("\(전달받을인자)")
}
}
3. @State의 역할
@State를 붙여주는 이유는 @State를 붙인 변수가 "수정될 수 있고", "수정된 사항"이 뷰에 자동으로 반영되기 때문입니다.예를들어 아래처럼 버튼을 추가해서 string을 변경하는 코드는 에러를 내뱉습니다
struct ContentView: View {
var body: some View {
ChildView(전달받을인자: "이 문자열을 전달")
}
}
struct ChildView: View {
var 전달받을인자: String
init(전달받을인자: String) {
self.전달받을인자 = 전달받을인자
}
var body: some View {
Text("\(전달받을인자)")
Button {
전달받을인자 += "1"
} label: {
Text("Button")
}
}
}
왜냐하면 struct의 내부에 있는 "전달받을인자" 프로퍼티는 뷰에서 수정이 될 수 없기 때문입니다.
그런데 이부분을 아래처럼 @State를 붙여준다면 에러는 사라지고 버튼을 클릭해서 변경된 변수내용이 뷰에 자동으로 반영됩니다.
struct ContentView: View {
var body: some View {
ChildView(전달받을인자: "이 문자열을 전달")
}
}
struct ChildView: View {
@State var 전달받을인자: String
init(전달받을인자: String) {
self.전달받을인자 = 전달받을인자
}
var body: some View {
Text("\(전달받을인자)")
Button {
전달받을인자 += "1"
} label: {
Text("Button")
}
}
}
최종결과

또 궁금하신 사항있으면 질문 주세요~
그리고 지난번에 제가 메일로 기프티콘 보내드렸었는데요.
사용이 안된거 같은데 한번 확인해보실래요?
즐거운 저녁 되세요~ :D
searchable이 화면 하단에 위치해요
0
60
2
warning 하나가 있는 것 같습니다. 해결방법좀 알려주세요
0
79
2
설계 관련하여 참고할 문서나 예제 공유가 가능할까요?
1
71
2
Thread number가 다 1로 나옵니다
1
69
2
'loadAllPosts' 를 매번 사용해야 하나요?
1
69
2
75강 실시간으로 팔로우수 안늘어나는 이유?
1
135
3
예전코드도 배워야 할까요?
1
137
1
ProfileView에서 toolbar이용시 문제점 발생, 로직이 이해가 되지 않습니다.
0
161
1
62강 Follow, Unfollow기능구현에서,,
0
107
2
애구마선생님, 다음 프로젝트 강의는 언제 올려주세요???
0
108
2
51강 10:22에서 이미지 여러장이 나오지 않아요;;
0
108
2
52강 post데이터가 불러와지지 않아요,,,
0
135
2
ViewModel과 Model 구분 (30강)
1
133
2
바인딩하는 이유
1
94
2
75강 까지 마무리후 소스 오류 사항 문의
0
109
1
SwiftUI main actor 관한 경고 계속 뜹니다.
1
245
2
45강의 에서 Kingfisher 사용후 발생하는 swift6 이슈
1
152
2
19강에서 Encoder()를 사용할 수 없습니다.
1
135
2
40. 강에서 정상작동 안합니다.
0
168
3
프로필 수정 후 변경된 내용을 피드에 바로 반영되도록 하고 싶습니다.
1
134
2
15강에서 발생한 문제에 대해서 질문이 있습니다!
1
301
3
13강 코드 작성 후 피드의 유저 데이터가 보이지 않는 문제
1
217
3
혹시 다음 강의 대략 언제쯤 완료되시는지 알 수 있을까요??
1
166
2
섹션7 뷰 리팩토링 질문있습니다.
0
106
2





