複数ビューの重複データの管理[SwitUI]
背景
親ビューで編集ボタンを押してサブビューに移動するとします.サブビューには、親ビューの背景色を変更する機能が含まれます.では、サブビューで変更した背景色を親ビューに渡して、親ビューの背景色を変更するにはどうすればいいのでしょうか.
に道を教える
まず,単点源(SSOT)の概念を理解する.たとえば、あるデータが親ビューで使用され、サブビューで使用されるとします.SSOTの概念を理解していない場合は、親ビューに特定のデータを格納し、サブビューに特定のデータを格納します.これは、データが複数の場所に格納されているためにエラーが発生します.ただし、親ビューにSOTというリポジトリを作成する場合は、親ビューからアクセスするか、子ビューからアクセスすることができます.さらに、サブビューでSOTの値を変更すると、親ビューはそれに気づき、ビューを更新します.
上のリンクを参照してください.まず、@Stateという名前のPropertyを使用して、そのPropertyを宣言するビューにSOTを作成します.以下のように宣言することができる.
したがって、サブビューを呼び出すときも、SOTにアクセスするには$を貼り付け、バインドされた値を渡す必要があります.
親ビューで編集ボタンを押してサブビューに移動するとします.サブビューには、親ビューの背景色を変更する機能が含まれます.では、サブビューで変更した背景色を親ビューに渡して、親ビューの背景色を変更するにはどうすればいいのでしょうか.
に道を教える
まず,単点源(SSOT)の概念を理解する.たとえば、あるデータが親ビューで使用され、サブビューで使用されるとします.SSOTの概念を理解していない場合は、親ビューに特定のデータを格納し、サブビューに特定のデータを格納します.これは、データが複数の場所に格納されているためにエラーが発生します.ただし、親ビューにSOTというリポジトリを作成する場合は、親ビューからアクセスするか、子ビューからアクセスすることができます.さらに、サブビューでSOTの値を変更すると、親ビューはそれに気づき、ビューを更新します.
上のリンクを参照してください.まず、@Stateという名前のPropertyを使用して、そのPropertyを宣言するビューにSOTを作成します.以下のように宣言することができる.
@State private var name = "Amy" // "Amy"라는 이름을 SOT에 저장
親ビューが画面に名前を表示するとします.もしそうなら、このような方法でコードを整理することができます.struct MeetingView: View {
@State private var name = "Amy"
var body: some View {
Text($name)
}
}
nameの前に$を追加するのは、値がバインドされている場合にのみ、nameが変更されたときにビューが検出され更新されるためです.したがって、サブビューを呼び出すときも、SOTにアクセスするには$を貼り付け、バインドされた値を渡す必要があります.
struct DetailView: View {
... // 생략
@State private var name = "Amy"
var body: some View {
Text($name)
}
var body: some View {
List{
... // 생략
}
.sheet(isPresented: isPresentingEditView){
NavigationView {
DetailEditView(data: $data) // 자식 뷰를 호출할 때도 $를 붙여준다.
今からビューを見てみましょう.struct DetailEditView: View {
@Binding var name: String
var body: some View {
TextField("Name", text: $name)
... // 생략
}
}
名前をTextFieldに変更できます.変更後に親ビューに移動すると、親ビューも変更された名前に変更されていることがわかります.これは、SOTに保存されている値に触れるため、$付きの値はすべて値変更時にupdateとして確認できます.Reference
この問題について(複数ビューの重複データの管理[SwitUI]), 我々は、より多くの情報をここで見つけました https://velog.io/@qwer15417/SwiftUI-여러-뷰에-중복되는-데이터를-관리하는-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol