You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:27:15