Обратный вызов SwiftUI как параметр для представления - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь разделить мои представления SwiftUI на как можно меньше повторно используемых компонентов. Итак, у меня есть MainView, который находится сверху, а затем два вида (MyContentView и MenuView), которые оба живут внутри MainView. Оба внутренних представления имеют некоторую функциональность, которую я хочу обновить в MainView. Поэтому я подумал, что мог бы передать некоторую функцию в качестве параметра внутренним представлениям из MainView, поэтому при нажатии кнопки во внутренних представлениях это вызовет код в MainView. Самое близкое, что мне удалось получить, - это запуск параметра функции при каждом обновлении внутреннего представления. Каков наилучший способ достичь этого? Вот пример моего кода:

Главный вид:

struct MainView: View {
    var body: some View {
         VStack {
             MyContentView(self.$doSomething)
             MenuView(self.$doSomething)
         }
    }

    func doSomething() {
        print("do something")
    }
}

struct MyContentView : View {
    var doSomething : ()
    var body: some View {
        Button(action: { self.doSomething }) { Text("do something") }
    }
}

struct MenuView : View {
    var doSomething : ()
    var body: some View {
        Button(action: { self.doSomething }) { Text("Menu do something") }
    }
}

Каков наилучший способ получения обратных вызовов из внутренних представлений?

1 Ответ

1 голос
/ 28 марта 2020

Ниже работает вариант. Протестировано с Xcode 11.4.

struct MainView: View {
    var body: some View {
         VStack {
             MyContentView(doSomething: self.doSomething)
             MenuView(doSomething: self.doSomething)
         }
    }

    func doSomething() {
        print("do something")
    }
}

struct MyContentView : View {
    var doSomething : () -> ()
    var body: some View {
        Button(action: { self.doSomething() }) { Text("do something") }
    }
}

struct MenuView : View {
    var doSomething : () -> ()
    var body: some View {
        Button(action: { self.doSomething() }) { Text("Menu do something") }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...