Почему это происходит в SwiftUI, при представлении модального представления с помощью .sheet, init () вызывается дважды - PullRequest
3 голосов
/ 20 февраля 2020

Я создаю ситуацию на WatchOS со следующим кодом

struct Modal : View {
    @Binding var showingModal : Bool

    init(showingModal : Binding<Bool>){
        self._showingModal = showingModal
        print("init modal")
    }

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

struct ContentView: View {
    @State var showingModal = false
    var body: some View {
        Button(action: {
            self.showingModal.toggle()
        }, label: {
            Text("AAAA")
        }).sheet(isPresented: $showingModal, content: {Modal(showingModal: self.$showingModal)})
    }
}

Каждый раз, когда я нажимаю кнопку в главном представлении, чтобы вызвать модал с помощью .sheet, создается два экземпляра модального представления.

Может ли кто-нибудь объяснить это явление?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Это, вероятно, ошибка, как в Xcode 11.4.1 (11E503a). Помните, что если, например, инициализировать модели представления (или что-либо еще в этом отношении), например, так:

.sheet(isPresented: $isEditingModalPresented) {
    LEditView(vm: LEditViewModel(), isPresented: self.$isEditingModalPresented)
}

, виртуальная машина будет инициализирована дважды.

0 голосов
/ 20 февраля 2020

Закомментируйте / удалите метод init () из Modal со всем остальным так же. Вы должны быть в состоянии решить проблему двух создаваемых экземпляров Modal, потому что вы явно инициализируете привязку (showModal) в init () Modal. Надеюсь, что это имеет смысл.

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