我\xe2\x80\x99在 SwiftUI 中遇到了与工作表演示相关的令人费解的行为。关闭工作表时,我注意到关联的实例(工作表\xe2\x80\x99s 视图持有的视图模型)don\xe2\x80\x99t 似乎已正确取消初始化。
\n根据我的测试,唯一deinit按预期被调用的场景是使用@StateObject. 相反,@ObservedObject新@Observable宏 don\xe2\x80\x99t 似乎都会触发调用deinit。
下面,我\xe2\x80\x99ve提供了一组展示各种场景的示例。每个尝试以不同的方式提供视图模型。要测试解雇,您只需在显示的工作表上向下滑动即可:
\nimport SwiftUI\n\n// ============================================================================ //\n// MARK: - App\n// ============================================================================ //\n\n@main\nstruct SwiftUISheetDeinitIssueApp: App {\n var body: some Scene {\n WindowGroup {\n CaseA_ContentView()\n }\n }\n}\n\n// ============================================================================ //\n// MARK: - Case A: @StateObject (Works!)\n// ============================================================================ //\n\nstruct CaseA_ContentView: View {\n @State var isPresented = false\n \n var body: some View {\n Button("Show Sheet") {\n self.isPresented = true\n }\n .sheet(isPresented: $isPresented) {\n CaseA_SheetView()\n …Run Code Online (Sandbox Code Playgroud)