web-dev-qa-db-ja.com

SwiftUI-NavigationViewでのメモリリーク

モーダルに表示されるビューのナビゲーションバーに閉じるボタンを追加しようとしています。ただし、閉じた後、私のビューモデルdeinitメソッドが呼び出されることはありません。 navigationBarItemselfをキャプチャする場所に問題があることがわかりました。 navigationBarItemのアクションでweak selfを渡すだけではできません。Viewはクラスではなく構造体だからです。これは有効な問題ですか、それとも単なる知識不足ですか?

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

私の解決策は

.navigationBarItems(
    trailing: self.filterButton
)

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

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