提问者:小点点

如何在SwiftUI中删除重复的集合元素


如何修改代码,使其不显示具有相同activity.Date(不带时间)的活动,其中activity.Date是来自CoreData实体的Date()值。

 List(Array(place.activities as Set), id: \.self) { activity in
     Text(dateFormatter.string(from: activity.date))
 }

共1个答案

匿名用户

下面是一个可能方法的演示(假定是代码的副本):

// Confirm your activity to Equatable explicitly like
struct MyActivity: Identifiable, Equatable, Hashable {
    static func == (lhs: Self, rhs: Self) -> Bool {
        lhs.name == rhs.name && 
          Calendar.current.isDate(lhs.date, inSameDayAs:rhs.date)
    }

    let id = UUID()
    var name: String
    var date: Date
}

struct TestView: View {
    var activities: [MyActivity] = []

    var body: some View {
        // convert to set and back to array
        List(Array(Set(activities)), id: \.self) { activity in
            VStack {
                Text(activity.name)
                Text(dateFormatter.string(from: activity.date))
            }
        }
    }
}