Don';我不知道如何访问字典[:[]、Swift和iOS中的数组数据

Don';我不知道如何访问字典[:[]、Swift和iOS中的数组数据,ios,arrays,swift,dictionary,Ios,Arrays,Swift,Dictionary,我被这个家伙困住了[:[]。正如您所看到的,当前在函数内部,我使用[0]来访问值,但使用这种类型的解决方案,我只能访问数组的第一个元素。如何访问所有值?我尝试了for in循环,但无法解决它 提前谢谢 func tripServices(tripId: String) { networkManager.getBookedTripsDetails(endpoint: "/v1/bookings/\(tripId)", tripId: tripId) { [unowned

我被这个家伙困住了[:[]。正如您所看到的,当前在函数内部,我使用[0]来访问值,但使用这种类型的解决方案,我只能访问数组的第一个元素。如何访问所有值?我尝试了for in循环,但无法解决它

提前谢谢

func tripServices(tripId: String) {
    networkManager.getBookedTripsDetails(endpoint: "/v1/bookings/\(tripId)", tripId: tripId) { [unowned self] (safeTripsDetails) in
        DispatchQueue.main.async {
            self.bookedTripDetails = self.createScreenData(from: safeTripsDetails!, singleTrip: self.singleTrip!)
            self.tableView.reloadData()
        }
    }
}

func createScreenData(from data: [String: [BookingService]], singleTrip: BookedTripsForView) -> [DetailsAboutServiceForView] {
    
    return data.map{ ( data) -> DetailsAboutServiceForView in
        return DetailsAboutServiceForView(id: singleTrip.id,
                                          destination: data.value[0].destination,
                                          tripStatus: data.value[0].status,
                                          tripStartTime: data.value[0].startDate,
                                          serviceName: data.value[0].serviceName,
                                          serviceId: data.value[0].serviceId)
    }
}

如果您有一个数组字典,并且希望您的输出是一个包含所有数组的单个数组,这些数组组合成一个不同类型的数组,那么有多种方法可以做到这一点

我没有尝试计算数据类型,而是使用简单的结构创建了一个示例:

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

//Output struct
struct Employee {
    let name: String
    let age: Int
    let salary: Int?
}

let dictOfArrays = ["key1": [Person(name: "Bob", age: 36),
                             Person(name: "Felecia", age: 27),
                             Person(name: "Armin", age: 19)],
                    
                    "key2": [Person(name: "Janet", age: 57),
                             Person(name: "John", age: 12),
                             Person(name: "Karen", age: 43)]
]

//Create an empty array for the output
var output = [Employee]()

//Loop through the dictionaries
dictOfArrays.forEach { (_, values) in
    values.forEach { person in
        //Only those who are >=18 can be employees
        if person.age >= 18 {
            output.append( Employee(name: person.name, age: person.age, salary: nil))
        }
    }
}

//Logs the resulting array of Employee structs.
output.forEach { print($0) }
编辑: 正如Alexander在其评论中指出的,您可以在一条语句中执行上述操作,而无需创建数组变量并使用flatmap、filter和map的组合对其进行追加:

let output = dictOfArrays.flatMap { (_, values) in
    values.filter { $0.age >= 18 }
    .map { person in
        Employee(name: person.name, age: person.age, salary: nil)
    }
}

如果您有一个数组字典,并且希望您的输出是一个包含所有数组的单个数组,这些数组组合成一个不同类型的数组,那么有多种方法可以做到这一点

我没有尝试计算数据类型,而是使用简单的结构创建了一个示例:

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

//Output struct
struct Employee {
    let name: String
    let age: Int
    let salary: Int?
}

let dictOfArrays = ["key1": [Person(name: "Bob", age: 36),
                             Person(name: "Felecia", age: 27),
                             Person(name: "Armin", age: 19)],
                    
                    "key2": [Person(name: "Janet", age: 57),
                             Person(name: "John", age: 12),
                             Person(name: "Karen", age: 43)]
]

//Create an empty array for the output
var output = [Employee]()

//Loop through the dictionaries
dictOfArrays.forEach { (_, values) in
    values.forEach { person in
        //Only those who are >=18 can be employees
        if person.age >= 18 {
            output.append( Employee(name: person.name, age: person.age, salary: nil))
        }
    }
}

//Logs the resulting array of Employee structs.
output.forEach { print($0) }
编辑: 正如Alexander在其评论中指出的,您可以在一条语句中执行上述操作,而无需创建数组变量并使用flatmap、filter和map的组合对其进行追加:

let output = dictOfArrays.flatMap { (_, values) in
    values.filter { $0.age >= 18 }
    .map { person in
        Employee(name: person.name, age: person.age, salary: nil)
    }
}

我认为这个错误是由Asol(以及那些批准编辑的人)造成的。您想要的输出是什么?你想要一个
detailsaboutserviceview
数组,该数组为字典中的每个数组组合
detailsaboutserviceview
对象?@Asol不,我说你犯了一个错误,但我想错误比错误更好。无论如何,您不应该像在编辑问题时那样添加注释。评论发布在这里的评论部分。@Asol,编辑是为了纠正打字错误/CLARFIE OP(原始海报)的问题。您不应在OPs问题中添加评论,或更改帖子的性质。如果您有意见,请按照Joakim的建议使用“意见”部分。@Duncan OK!下次我会记住这一点。我认为这个错误是由Asol(以及那些批准编辑的人)犯的。你想要的输出是什么?你想要一个
detailsaboutserviceview
数组,该数组为字典中的每个数组组合
detailsaboutserviceview
对象?@Asol不,我说你犯了一个错误,但我想错误比错误更好。无论如何,您不应该像在编辑问题时那样添加注释。评论发布在这里的评论部分。@Asol,编辑是为了纠正打字错误/CLARFIE OP(原始海报)的问题。您不应在OPs问题中添加评论,或更改帖子的性质。如果您有意见,请按照Joakim的建议使用“意见”部分。@Duncan OK!下次你可以不用一个可变数组和手动附加:
let output2=dictofarray.flatMap{({,values)in values.filter{$0.age>=18}.map{person in Employee(name:person.name,age:person.age,salary:nil)}
ah格式搞砸了,但是你得到了一个想法,你可以不用一个可变数组和手动附加来完成这项工作:
let output2=dictofarray.flatMap{({,values)in values.filter{$0.age>=18}.map{person in Employee(name:person.name,age:person.age,salary:nil)}
啊,格式弄乱了,但是你有了主意