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

Swift iOS中如何从Model数组提取id字段存入nameID数组

问题分析

你当前代码存在两个核心错误:

  • nameID用let声明为不可变常量,初始化后无法修改赋值,无法存储后续提取的id值
  • map方法使用逻辑错误:map的作用是遍历数组元素,将闭包返回的值按原顺序组装为新数组,不需要在闭包内手动给外部数组赋值。你写的self.nameID = item.id是试图将单个Int类型值直接赋值给[Int]数组类型,存在类型不匹配问题,就算绕过类型检查最终也只会存入最后一个遍历到的id,无法得到完整的id数组。
正确实现代码

Model定义(无需修改,原定义正确)

struct Model {
    let id: Int
    let name: String
}

ViewController修正代码

class ViewController: UIViewController {
    // 将let改为var,声明为可变数组
    var nameID = [Int]()
    let testModel = [Model(id: 1, name: ""), Model(id: 2, name: ""), Model(id: 3, name: "")]

    override func viewDidLoad() {
        super.viewDidLoad()
        // map闭包中直接返回每个元素的id字段,map会自动组装为[Int]类型的新数组赋值给nameID
        nameID = testModel.map { item in
            item.id
        }
        // 更简洁的简写语法:直接用$0指代遍历到的元素
        // nameID = testModel.map { $0.id }
        // Swift 5.2+支持键路径写法,代码更精简:
        // nameID = testModel.map(\.id)

        // 打印验证结果,输出为 [1, 2, 3]
        print(nameID)
    }
}
补充说明

如果不需要提前声明nameID属性,可以直接在viewDidLoad里通过map生成新数组,不需要提前初始化空数组:

override func viewDidLoad() {
    super.viewDidLoad()
    let nameID = testModel.map(\.id)
}

内容的提问来源于stack exchange,提问作者Ky Gia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:36:23