如何在SwiftUI中为每台选中的设备创建独立的自定义唯一视图
设备自定义视图实现方案
你可以通过给设备模型添加类型标识,配合SwiftUI导航跳转的视图匹配逻辑实现需求,具体操作如下:
- 首先完善设备数据结构,新增设备类型枚举字段,用来区分不同设备:
// 先定义设备类型枚举,覆盖所有你需要适配的设备 enum DeviceType { case iPhone8, iPhoneX, iPhone11, iPadPro /* 按需补充其他设备 */ } // 原有Ios数据模型新增类型字段 struct IosDevice: Identifiable { let id = UUID() let name: String let image: String let deviceType: DeviceType var sousMenuIos: [IosDevice]? // 保留原有的子菜单属性 }
- 为每个设备类型单独编写对应的自定义详情视图,比如
iPhoneXDetailView、iPadProDetailView,各自实现不同的展示逻辑即可。 - 修改现有的ContentView代码,给列表项加上导航跳转逻辑,根据点击的设备类型渲染对应视图:
struct ContentView: View { var body: some View { NavigationView { List(Ios, children: \.sousMenuIos) { item in NavigationLink { // 匹配设备类型返回对应详情视图 switch item.deviceType { case .iPhone8: iPhone8DetailView() case .iPhoneX: iPhoneXDetailView() case .iPhone11: iPhone11DetailView() case .iPadPro: iPadProDetailView() } } label: { HStack { Image(item.image) .resizable() .scaledToFit() .frame(width: 60, height: 60) Text(item.name) .font(.system(.title3, design: .rounded)) .bold() } } } .navigationTitle("Jailbreak") } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
如果后续需要适配的设备数量较多,可以把视图匹配逻辑封装到DeviceType枚举内部,新增返回对应视图的计算属性即可,后续新增设备只要补充枚举项、对应视图和枚举内部的匹配逻辑,维护成本更低。
内容的提问来源于stack exchange,提问作者Guillaume Combot
相关产品推荐
相关产品推荐

