繁体   English   中英

如何在 swift IOS 中构造我的数据以在 tableView 中使用?

[英]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。

这张图片代表了我在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM