如何在Swift中动态为类类型数组批量添加元素
Swift 动态为类类型数组添加元素实现
核心实现逻辑非常直接,整个过程需要先满足Swift对类的初始化语法要求,再通过循环追加对象实例即可,具体要点:
- 补全
Student类的初始化逻辑:原代码中Student的三个存储属性都没有默认值,Swift 语法要求类必须显式实现构造方法,才能正常实例化对象。 - 数组元素追加逻辑:在空数组初始化完成后,循环执行
count次,每次构造带完整属性的Student实例,调用数组的append(_:)方法将实例加入数组。 - 作用域注意:原代码中在
Fetch初始化器内部声明的student是局部变量,初始化执行完成后就会被回收,如果需要在Fetch实例的其他方法中访问学生数组,需要将它提升为类的实例属性。
完整可运行实现代码
class Student { var id: Int var name: String var mark: Int // 显式实现Student类的构造方法 init(id: Int, name: String, mark: Int) { self.id = id self.name = name self.mark = mark } } class Fetch { // 将学生数组声明为实例属性,保证作用域覆盖整个类 var student: [Student] init(count: Int) { // 初始化空数组 self.student = [Student]() // 循环count次动态添加元素 for index in 0..<count { // 根据业务逻辑组装学生属性,此处为示例赋值 let studentItem = Student( id: index, name: "学生\(index + 1)", mark: 0 ) student.append(studentItem) } } }
简化写法
如果不想手写循环,也可以通过数组的map方法直接从区间序列生成目标数组,效果和手动循环完全等价:
init(count: Int) { // 直接通过0..<count的闭包映射生成学生数组,无需手动初始化空数组再append self.student = (0..<count).map { index in Student(id: index, name: "学生\(index + 1)", mark: 0) } }
常见注意点
Student是引用类型,追加到数组的是对象的引用,后续修改数组内的Student实例属性,会直接作用于原对象。- 如果后续需要从接口获取学生详情填充属性,只需要在构造
Student实例的位置,替换为接口返回的对应字段值即可,追加数组的逻辑不需要改动。 - 如果
student数组仅在初始化器内部使用、不需要对外暴露,只需要把数组声明从实例属性改回局部变量即可,元素追加逻辑没有任何区别。
内容的提问来源于stack exchange,提问作者Ae Ri
相关产品推荐
相关产品推荐

