[SwiftUI] 동일한 화면에서 View 전환 모범 사례
동일한 화면에서 View 전환
SwiftUI
의 경우 同一画面内
에서 View를 전환하는 장면이 자주 있을 것이다.예를 들어 データ読み込み中
,データの表示
,エラー表示
등이다.전환 방법도
if
과switch
의 방법이 있는데 이번switch
에는 가능한 한 간단한 방법을 사용하겠습니다.사용법
enum
에서 변환 모드를 정의하고 @State
를 통해 관리Binding
방법을 사용한 2가지 모드enum에서 전환 모드 정의
전환 모드는 다음과 같습니다.
enum ContentState {
case first //1つ目のView
case second(text: String) //2つ目のView(値を渡します)
case third //3つ目のView
}
ContentView
홈 뷰는 다음과 같이 정의됩니다.
struct ContentView: View {
@State var state: ContentState = .first
var body: some View {
NavigationView {
switch state {
case .first:
FirstView { text in
state = .second(text: text)
}
case .second(let text):
SecondView(text: text) {
state = .third
}
case .third:
ThirdView(state: $state)
}
}
}
}
방금 정의한 ContentState
를 사용하고 @State
로 초기 상태를 정의합니다.switch
를 사용하여 각자의 도형으로view를 나누어 줍니다.FirstView
,SecondView
①호출 방법,ThirdView
②Binding
호출 방법을 사용합니다.FirstView->SecondView->TheirdView->FirstView와 같은 전환 절차.
FirstView
,SecondView
,ThirdView
는 다음과 같은 실시 방식이다.struct FirstView: View {
var onClick: (String) -> Void
var body: some View {
VStack(spacing: 32) {
Text("First")
.font(.title)
Button("Next") {
onClick("From first")
}
}
}
}
struct SecondView: View {
var text: String
var onClick: () -> Void
var body: some View {
VStack(spacing: 32) {
Text("Second")
.font(.title)
Text(text)
Button("Next") {
onClick()
}
}
}
}
struct ThirdView: View {
@Binding var state: ContentState
var body: some View {
VStack(spacing: 32) {
Text("Third View")
Button("go to First") {
state = .first
}
}
}
}
①호출 사용 방법
장점
결점
② Binding을 사용하는 방법
장점
결점
끝맺다
호출을 사용하는 방법과 빙딩을 사용하는 방법을 비교해 봤다.둘 다 편한 방법이지만 단점도 있다.
설치할 때 이 장점과 단점을 감안하여 적당한 방법을 선택할 수 있다면 읽기 쉽고 유지보수성이 높은 코드를 쓸 수 있다.
보태다
이번에 View의 전환 관리는 사용되지 않았습니다
ObservableObject
.ObservableObject
는 MVVM
구조의 ViewModel
에 해당하지만 View의 전환 논리는 View
측면이 비교적 좋다.이렇게 하면 ViewModel이 복잡해지는 것을 방지하려는 의도가 있다.샘플 코드
Reference
이 문제에 관하여([SwiftUI] 동일한 화면에서 View 전환 모범 사례), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/usk2000/articles/f6698e70e25cfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)