SwiftUI - Кнопка - Как передать запрос функции родителю - PullRequest
1 голос
/ 22 января 2020

Как заставить кнопку выполнить действие, которое вызывает функцию в ее «родительском» представлении? Я пытаюсь реорганизовать свой код так, чтобы компоненты были как можно меньше.

В этом случае кнопка выполняет несколько задач, но одна из них - запустить функцию:

Button(
 action: {
  self.setViewBackToNil()
 }){
  Text("Button")
}

// which triggers a function
func setViewBackToNil(){
 self.userData.image = nil
 self.isProcessing = false
 .... etc
}

Теперь, если я поверну кнопку в собственном представлении, я не смогу передать self.setViewBackToNil, потому что он содержится в структуре родителя.

Есть ли способ для компонента вызвать функцию в пределах своего родителя?

1 Ответ

5 голосов
/ 22 января 2020

Это небольшой пример того, как передать закрытие вашему дочернему представлению, которое затем вызывает функцию родителя:

struct ChildView: View {
    var function: () -> Void

    var body: some View {
        Button(action: {
            self.function()
        }, label: {
            Text("Button")
        })
    }
}

struct ContentView: View {
    var body: some View {
        ChildView(function: { self.setViewBackToNil() })
    }

    func setViewBackToNil() {
        print("I am the parent")
    }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...