gpt4 book ai didi

arrays - 在 Swift4 中按日期过滤事件

转载 作者:行者123 更新时间:2023-11-30 11:06:16 25 4
gpt4 key购买 nike

我正在构建一个应用程序,为自闭症 child 提供一个基于预定事件的非常简单的视觉日历。到目前为止,我没有遇到任何重大问题,并且当为每个重复频率(每日、每周、每月、每年)添加第一个事件时,我的事件可以正确过滤。

但是,由于某种原因,当我尝试添加第二个事件(其重复频率与之前添加的任何事件相匹配)时,它将不会填充。

我尝试自行调试并缩小问题范围,但无济于事。我确信我错过了一些非常简单的东西。预先感谢您提供的任何帮助来解决此问题。

此函数按日期过滤整个日期列表:

func filterEvents() {
filteredEvents = []
tempEvents = []
dates = []

removeOldEvents()
generateRecurrances()
extractDates()

var currentIndex = 0

for date in dates {
if filteredEvents.count == 0 {
filteredEvents.append([])
}

else if filteredEvents.count != currentIndex + 1 {
filteredEvents.append([])
}

filteredEvents[currentIndex] = tempEvents.filter({ $0.filterDate() == date })

currentIndex += 1
}
}

此函数用于提取必要的信息以按日期过滤:

func extractDates() {
for event in tempEvents {
let extractedDate: (month: Int, day: Int, year: Int) = (event.month(), event.day(), event.year())

dates.append(extractedDate)
}

var currentIndex = 0

for date in dates {
if currentIndex != 0 {
if date.month == dates[currentIndex - 1].month && date.day == dates[currentIndex - 1].day && date.year == dates[currentIndex - 1].year {
dates.remove(at: currentIndex)
currentIndex -= 1
}
}

currentIndex += 1
}
}

此函数根据用户在创建原始事件时的偏好生成重复的 future 事件:

func generateRecurrances() {
var dateComponent = DateComponents()
var daysToAdd = 0
var weeksToAdd = 0
var monthsToAdd = 0
var yearsToAdd = 0

for event in events {
if event.recurrenceFrequency == 1 {
for _ in 1...60 {
dateComponent.day = daysToAdd
dateComponent.month = 0
dateComponent.year = 0

let newDate = Calendar.current.date(byAdding: dateComponent, to: event.date)

tempEvents.append(Event(name: event.name, date: newDate!, image: event.image, completion: event.requiresCompletion, recurrenceFrequency: event.recurrenceFrequency))

daysToAdd += 1
}
}

else if event.recurrenceFrequency == 2 {
for _ in 1...8 {
dateComponent.day = weeksToAdd
dateComponent.month = 0
dateComponent.year = 0

let newDate = Calendar.current.date(byAdding: dateComponent, to: event.date)

tempEvents.append(Event(name: event.name, date: newDate!, image: event.image, completion: event.requiresCompletion, recurrenceFrequency: event.recurrenceFrequency))

weeksToAdd += 7
}
}

else if event.recurrenceFrequency == 3 {
for _ in 1...2 {
dateComponent.day = 0
dateComponent.month = monthsToAdd
dateComponent.year = 0

let newDate = Calendar.current.date(byAdding: dateComponent, to: event.date)

tempEvents.append(Event(name: event.name, date: newDate!, image: event.image, completion: event.requiresCompletion, recurrenceFrequency: event.recurrenceFrequency))

monthsToAdd += 1
}
}

else if event.recurrenceFrequency == 4 {
for _ in 1...2 {
dateComponent.day = 0
dateComponent.month = 0
dateComponent.year = yearsToAdd

let newDate = Calendar.current.date(byAdding: dateComponent, to: event.date)

tempEvents.append(Event(name: event.name, date: newDate!, image: event.image, completion: event.requiresCompletion, recurrenceFrequency: event.recurrenceFrequency))

yearsToAdd += 1
}
}

else if event.recurrenceFrequency == 0 {
tempEvents.append(event)
}
}

daysToAdd = 0
}

我真的不认为这是相关的,但为了安全起见,这里是用于自动删除日期早于当前日期的事件的函数:

func removeOldEvents() {
var currentIndex = 0

let now = Event(name: "Now", date: Date(), image: #imageLiteral(resourceName: "Logo"), completion: false, recurrenceFrequency: 0)

for event in events {
if event.year() < now.year() {
events.remove(at: currentIndex)

currentIndex -= 1
}

else if event.month() < now.month() {
events.remove(at: currentIndex)

currentIndex -= 1
}

else if event.day() < now.day() {
events.remove(at: currentIndex)

currentIndex -= 1
}

currentIndex += 1
}
}

最佳答案

对 extractDates() 的修改解决了此问题。感谢您为我指明了正确的方向。

func extractDates() {
for event in tempEvents {
dates.append(event.date)
}

var currentIndex = 0

for date in dates {
let newDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: date)!
dates[currentIndex] = newDate
print(dates[currentIndex])
currentIndex += 1
}

var tempDates = dates.removingDuplicates()
tempDates = tempDates.sorted()
dates = tempDates

for date in dates {
let calendar = Calendar.current

let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)

dateComponents.append((month, day, year))
}
}

关于arrays - 在 Swift4 中按日期过滤事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com