web-dev-qa-db-fra.com

SwiftUI - fuite de mémoire dans NavigationView

J'essaie d'ajouter un bouton de fermeture à la barre de navigation de la vue présentée modalement. Cependant, après rejet, ma méthode de modèles de vue deinit n'est jamais appelée. J'ai trouvé que le problème est là où il capture les self dans navigationBarItem. Je ne peux pas simplement passer un weak self in navigationBarItem 's action, car View est une structure, pas une classe. Est-ce un problème valable ou simplement un manque de connaissances?

struct ModalView: View {

    @Environment(\.presentationMode) private var presentation: Binding<PresentationMode>
    @ObservedObject var viewModel: ViewModel

    var body: some View {

        NavigationView {
            Text("Modal is presented")
            .navigationBarItems(leading:
                Button(action: {
                    // works after commenting this line
                    self.presentation.wrappedValue.dismiss()
                }) {
                    Text("close")
                }

            )
        }
    }
}
7
Vahagn Gevorgyan

Ma solution est

.navigationBarItems(
    trailing: self.filterButton
)

..........................................

var filterButton: some View {
    Button(action: {[weak viewModel] in
        viewModel?.showFilter()
    },label: {
        Image("search-filter-icon").renderingMode(.original)
    })
}
0
saniaxxx26