SwiftUI Picker选中完整Recipe对象并保存的实现疑问
解决SwiftUI Picker选中完整Recipe对象的问题
直接调整下面几个关键点,就能让Picker绑定并返回完整的Recipe对象:
- 让Recipe类型遵循Identifiable协议
你的Recipe已经自带ID字段,刚好满足Identifiable的要求,能让SwiftUI自动识别每个对象的唯一性。示例结构体如下:
struct Recipe: Identifiable, Codable { let id: Int // 换成你API返回的ID类型,比如UUID/String都可以 let name: String // 其他API返回的字段 }
- 修改选中变量的类型
把selectedItem的类型改成可选的Recipe(初始状态可能没有选中项):
@State private var selectedItem: Recipe?
- 给Picker选项添加匹配的Tag
Picker要求每个选项对应一个和selection变量类型一致的标记,这里直接把当前的Recipe对象设为tag:
Picker("Pick a recipe", selection: $selectedItem) { ForEach(recipes) { recipe in Text(recipe.name) .tag(recipe) // 关键:将完整对象作为选项的标记 } }
如果不想让Recipe遵循Identifiable,也可以在ForEach里显式指定ID字段,写法如下:
Picker("Pick a recipe", selection: $selectedItem) { ForEach(recipes, id: \.id) { recipe in Text(recipe.name) .tag(recipe) } }
完成以上操作后,选中Picker选项时,selectedItem就会被赋值为对应的完整Recipe对象,后续提交API时直接使用这个变量即可,示例:
// 提交到API的逻辑 if let selectedRecipe = selectedItem { // 将selectedRecipe编码后发送到你的.NET后端API即可 }
内容的提问来源于stack exchange,提问作者Anders
相关产品推荐
相关产品推荐

