Доступ SwiftUI передал данные просмотра в заголовке sctruct - PullRequest
1 голос
/ 01 августа 2020

Как передать данные в представление и использовать их непосредственно в «заголовке»? Все созданные мной руководства обращаются к данным в теле представления, что отлично работает, но я хочу вызвать метод graphlql из UpdateAccountView и затем визуализировать представление на основе результата.

Мой класс для передачи данных:

class Account {
    var tel: Int
    
    init(tel: Int) {
        self.tel = tel
    }
}

Мое основное представление, в котором класс инициализируется (упрощенно - обычно "тел" поступает из ввода)

struct ContentView: View {

        var account: Account = Account(tel: 123)
        var body: some View {
             NavigationView {
                   NavigationLink(
                        destination: UpdateAccountView(account: account),
                        label: {
                            Text("Navigate")
                        })
             }
         }
}

        

Представление, которое я вызываю, чтобы выполнить запрос и вызвать следующее представление, основанное на результате, UpdateAccount принимает в качестве параметра tel: Int. И вот в чем проблема. Я не могу получить доступ к account.tel из переданных данных.

struct UpdateAccountView: View {
     var account: Account
     @ObservedObject private var updateAccount: UpdateAccount = UpdateAccount(tel: account.tel)

     @ViewBuilder
     var body: some View {
        if updateAccount.success {
              AccountVerifyView()
        } else {
              ContentView()
        }
     }
} 

Ошибка:

Невозможно использовать член экземпляра 'account' в инициализаторе свойства; инициализаторы свойств запускаются до того, как 'self' станет доступным. Я понял, что здесь не нужно. Спасибо за помощь.

1 Ответ

2 голосов
/ 01 августа 2020

Вы можете указать это явно init, например

struct UpdateAccountView: View {
     var account: Account
     @ObservedObject private var updateAccount: UpdateAccount  // << declare

     init(account: Account) {
        self.account = account
        self.updateAccount = UpdateAccount(tel: account.tel)   // << here !!
     }

     // ... other code
}
...