SwiftUI中DeviceEditorView带参初始化器调用后editMode异常
问题分析与解决方案
问题根源
你调用编辑视图时同时传入了onScreen和editDevice参数,但你定义的两个初始化器都不支持同时接收这两个参数。此时Swift会自动生成一个合成初始化器,这个合成初始化器不会执行你自定义的editMode = true逻辑,导致editMode始终为false。
修复步骤
修正视图属性定义
确保DeviceEditorView的属性适配添加/编辑两种模式的需求:struct DeviceEditorView: View { @Binding var onScreen: Bool let editMode: Bool let device: Device? // 添加模式下无需传入设备,设为可选类型 // 后续视图代码... }重新定义初始化器
编写对应两种模式的初始化器,确保所有参数被正确处理:// 添加模式初始化器 init(onScreen: Binding<Bool>) { self._onScreen = onScreen self.editMode = false self.device = nil } // 编辑模式初始化器 init(onScreen: Binding<Bool>, editDevice: Device) { self._onScreen = onScreen self.editMode = true self.device = editDevice }验证调用逻辑
现有调用代码无需修改,会自动匹配对应初始化器:- 添加设备调用:
Button(action: { showingDeviceManager.toggle() }, label: { Text("Add Device") }) .sheet(isPresented: $showingDeviceManager, content:{ DeviceEditorView(onScreen: $showingDeviceManager) }) - 编辑设备调用:
Button(action: { showingDeviceManager.toggle() }, label: { Text("Edit Device") }).sheet(isPresented: $showingDeviceManager, content:{ DeviceEditorView(onScreen: $showingDeviceManager, editDevice:device) })
- 添加设备调用:
额外检查
确认视图内部没有其他代码意外修改editMode的值,比如在body或其他方法中重新赋值editMode = false。
内容的提问来源于stack exchange,提问作者Echo31416
相关产品推荐
相关产品推荐

