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
相关产品推荐
相关产品推荐

