SwiftUI: Предотвращение передачи значения привязки обратно?

#swift #swiftui

Вопрос:

в Secondary структуре @Binding свойство есть secondTime , и я хочу, чтобы оно изначально имело значение от «родителя».
Но когда я изменяю значение в этой структуре, time свойство в родительском элементе также изменяется. Есть ли способ получить значение от родителя, но не допустить, чтобы какие-либо изменения значения возвращались к родителю?

 struct ContentView: View {    @State var time: String = "";    var body: some View {    VStack {   Text("it is: (time)")    Secondary(secondTime: $time)    Button("Change time") {  time = "2 poclock"  }  }  } }  

 struct Secondary: View {  @Binding var secondTime: String;    var body: some View {  Text("secondary time is (secondTime)")    Button("Change time again from Secondary View") {  secondTime = "3 oclock"  }  } }  

Комментарии:

1. Смысл привязки должен быть двусторонним. Государство-это то, чего вы хотите вместо этого.

Ответ №1:

В Secondary использовании:

 @State var secondTime: String   

и в ContentView использовании:

 Secondary(secondTime: time)  

нет $time

ПРАВКА1:

Если вы хотите нажать кнопку, ContentView чтобы изменить оба представления, но Secondary изменить только себя, попробуйте этот подход:

 struct Secondary: View {  @Binding var secondTime: String  @State var localTime: String = ""    var body: some View {  Text("Secondary time is (localTime)") // lt;--- here  .onChange(of: secondTime) { newval in // lt;--- here  localTime = newval // lt;--- here  }  Button("Change time again from Secondary View") {  localTime = "3 oclock "   String(Int.random(in: 1..lt;100)) // lt;-- to show changes  }  } }    struct ContentView: View {  @State var time: String = ""    var body: some View {  VStack (spacing: 55) {  Text("ContentView it is: (time)")  Secondary(secondTime: $time)  Button("Change time") {  time = "2 oclock "   String(Int.random(in: 1..lt;100)) // lt;-- to show changes  }  }  }  }  

Комментарии:

1. Однако это не возвращает значение от родителя, верно?

2. верно. Вопрос был в следующем «… есть ли способ получить значение от родителя, но не допустить, чтобы какие-либо изменения значения возвращались к родителю»

3. Да, это может быть просто двусмысленное недоразумение с моей стороны, потому что я сделал вывод, что, когда вы нажимаете на кнопку, ContentView она меняет и то, и другое, но Secondary меняется только сама по себе.

4. Это тоже легко сделать. Это то, что arfanGhali2 ты хочешь сделать?

5. Не уверен, тбх. Не повредит сделать и то, и другое на всякий случай, или просто попросить разъяснений, я думаю