#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. Не уверен, тбх. Не повредит сделать и то, и другое на всякий случай, или просто попросить разъяснений, я думаю