SwiftUI中如何将JSON的roles字段显示在Picker组件中?
问题解决步骤
核心问题
你的Picker循环里遍历的是索引值(Int类型),而非inviteModel实例,所以rlist.roles会报错——因为Int类型根本没有roles属性。
修正代码
1. 修复Picker的ForEach遍历逻辑
直接遍历roleList数组即可(你的inviteModel已经实现Identifiable协议,ForEach可以直接处理):
Picker(selection: $role1, label: Text("Role 1")) { ForEach(roleList) { role in Text(role.roles).tag(role.index) } }
- 这里的
role是inviteModel的实例,直接访问role.roles就能拿到角色名称 tag要设置为每个选项的唯一标识(比如role.index或role.id),确保选中后role1能正确绑定对应值(注意role1的类型要和tag类型一致,比如用role.index的话,role1需定义为Int类型)
2. 修复API请求的变量大小写错误
loadRoles方法里变量名大小写不一致,会导致参数传递失败:
// 统一变量名大小写 var ackVal = "58ikf0" let parameters = "ack=\(ackVal)"
3. 可选:遵循Swift命名规范
结构体名首字母大写是Swift的通用编码习惯:
struct InviteModel: Codable, Identifiable { let id = UUID() var roles: String var index: Int } // 对应数组类型也要修改 @State var roleList = [InviteModel]()
完整修正后的Picker示例
// 假设role1为Int类型,与tag的role.index对应 @State private var role1 = 0 Picker(selection: $role1, label: Text("Role 1")) { ForEach(roleList) { role in Text(role.roles).tag(role.index) } }
内容的提问来源于stack exchange,提问作者Chris MB
相关产品推荐
相关产品推荐

