如何从Swift中的自定义结构数组中提取数组?

如何从Swift中的自定义结构数组中提取数组?,swift,Swift,我正在制作一个名为personStruct的结构,它需要一些简单的数据,比如年龄和名字。这是一个结构: struct personStruct { var name: String = String() var age: Int = Int() } 然后,我使用这个down类来提取我想要的数组: class PersonModel { var persones: [personStruct] = [personStruct]() var countOf

我正在制作一个名为personStruct结构,它需要一些简单的数据,比如年龄名字。这是一个结构:

struct personStruct
{
    var name: String = String()
    var age: Int = Int()
}
然后,我使用这个down类来提取我想要的数组:

class PersonModel
{
    
    var persones: [personStruct] = [personStruct]()
    var countOfPersones: Int { persones.count }
    
    
    
    func personesAgeArray() -> [Int]
    {
        var returnArray: [Int] = [Int]()
        for item in persones { returnArray.append(item.age) }
        return returnArray
    }
    
    func personesNameArray() -> [String]
    {
        var returnArray: [String] = [String]()
        for item in persones { returnArray.append(item.name) }
        return returnArray
    }
   
}
这是我对这些结构和类的用例:

let personModel: PersonModel = PersonModel()
personModel.persones = [personStruct(name: "bob", age: 30), personStruct(name: "Roz", age: 26), personStruct(name: "man", age: 40)]
print(personModel.personesAgeArray())
print(personModel.personesNameArray())

所以,正如你们看到的那个班完成了任务

我的目标:我们是否有真正的语法或更高效的方法来制作这些数组?(我的意思是personesagarraypersonesNameArray

我的超级目标:我希望personesAgeArraypersonesNameArray通过向persones添加新项目自动构建/更新

struct Person {
    let name: String
    let age: Int
}

class Model {
    var people: [Person] = []
    var peopleCount: Int { people.count }
    var ages: [Int] { people.map(\.age) }
    var names: [String] { people.map(\.name) }
}


有关更“快速”的代码:
func personesAgeArray()->[Int]{return persones.map{$0.age}
可能吗?但它仍然可以运行代码来执行手动循环。对于其余部分,更喜欢在结构和类名中使用大写字母(
personStruct
->
personStruct
),并且命名可能会更改。非常感谢!我认为你应该忘记你的超级目标,因为它太复杂了,会产生很多开销,但没有什么好处。@JoakimDanielson:我想是的!但如果它能起作用,那就太疯狂了?你知道我该怎么做吗?我应该从哪里开始?不,您需要维护3个不同的属性,因此需要存储两次数据。计算属性也同样好
let model: Model = .init()
model.people = [.init(name: "bob", age: 30), .init(name: "Roz", age: 26), .init(name: "man", age: 40)]
print(model.ages)  // "[30, 26, 40]\n"
print(model.names) // "["bob", "Roz", "man"]\n"
model.people.append(.init(name: "Omid", age: 20))
print(model.ages)  // "[30, 26, 40, 20]\n"
print(model.names) // "["bob", "Roz", "man", "Omid"]\n"