![](/img/trans.png)
[英]How can I reload all of data in tableview when I click cancel on search bar?(IOS/Swift)
[英]How can I structure my data in swift IOS to use in tableView?
我有一个从 API 获得的数据,其格式为
[
Appointments(startTime:"2022-09-01",subject:"Clinic Appointment",activityid:"2343"),
Appointments(startTime:"2022-09-01",subject:"Night Appointment",activityid:"5738"),
Appointments(startTime:"2022-09-01",subject:"Regular checkup",activityid:"2975"),
Appointments(startTime:"2022-09-02",subject:"High Fever",activityid:"9274"),
Appointments(startTime:"2022-09-02",subject:"Virtual checkup",activityid:"5648"),
Appointments(startTime:"2022-09-03",subject:"Regular Appointment",activityid:"1892")
]
我有一个数组,其中包含本月的所有日期,我想要的是我希望数据相对于前一个月的日期分布在我的月份中:
[
AppointmentsByDates(title:"2022-09-01" , appointments: [
Appointments(startTime:"2022-09-01",subject:"Night Appointment",activityid:"5738"),
Appointments(startTime:"2022-09-01",subject:"Regular checkup",activityid:"2975"),
Appointments(startTime:"2022-09-02",subject:"High Fever",activityid:"9274"),
]),
AppointmentsByDates(title:"2022-09-02" , appointments: [
Appointments(startTime:"2022-09-02",subject:"High Fever",activityid:"9274"),
Appointments(startTime:"2022-09-02",subject:"Virtual checkup",activityid:"5648"),
]),
AppointmentsByDates(title:"2022-09-03" , appointments: [
Appointments(startTime:"2022-09-03",subject:"Regular Appointment",activityid:"1892")
]),
AppointmentsByDates(title:"2022-09-04" , appointments: []),
AppointmentsByDates(title:"2022-09-05" , appointments: []),
AppointmentsByDates(title:"2022-09-06" , appointments: []),
.
.
.
AppointmentsByDates(title:"2022-09-30" , appointments: []),
]
如果您在上面的示例中看到 startTime 是数据的隔离对象,
我在 React Native 中使用 Javascript 中的 Maps 和 Reduce 进行了此操作,我是 iOS 的新手,我需要这些结构化数据来使用一个月内每个 Date 的多个部分填充 tableview。
你能帮我解决吗?
谢谢,
试试这个减少方法:
let sections = array.reduce(into: [AppointmentsByDates]()) { result, element in
if let index = result.firstIndex(where: { resuty in
return resuty.appointments.contains(where: {$0.startTime == element.startTime})
}) {
result[index].appointments.append(element)
}else {
result.append(AppointmentsByDates(title: element.startTime, appointments: [element]))
}
}
首先,假设您有两个结构,即 Appointments 和 AppointmentsByDates
struct Appointments {
var startTime : String
var subject : String
var activityid: String
}
struct AppointmentsByDates {
var title: String
var appointments : [Appointments]
}
你有你的数组就像上面一样
let arr = [
Appointments(startTime:"2022-09-01",subject:"Clinic Appointment",activityid:"2343"),
Appointments(startTime:"2022-09-01",subject:"Night Appointment",activityid:"5738"),
Appointments(startTime:"2022-09-01",subject:"Regular checkup",activityid:"2975"),
Appointments(startTime:"2022-09-02",subject:"High Fever",activityid:"9274"),
Appointments(startTime:"2022-09-02",subject:"Virtual checkup",activityid:"5648"),
Appointments(startTime:"2022-09-03",subject:"Regular Appointment",activityid:"1892")
]
对于您的问题,它可以分为两个任务:您可以将数组 map 放入字典中,其中键是 startTime,值是约会列表,其中 map 是那个键; 这里的关键是 AppointmentsByDates 的标题
// make dictionary which key is starttime
var dict : [String:[Appointments]] = [:]
for value in arr {
dict[value.startTime, default: []].append(value)
}
// make result mapping the key of dictionary to title
var result : [AppointmentsByDates] = []
for key in dict.keys {
let value = AppointmentsByDates(title: key, appointments: dict[key]!)
result.append(value)
}
然后你就会得到你的结果
print("result: ", result) // get your result here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.