Swift:快速创建日期数组
我正在使用一个日历,需要根据用户选择创建一个日期数组。我得到一个Swift:快速创建日期数组,swift,Swift,我正在使用一个日历,需要根据用户选择创建一个日期数组。我得到一个日期,然后计算整个星期。我目前正在使用for循环来实现这一点,但我相信有更好更快捷的方法来实现。我想使用地图,但我看不到: private func selectWeek(for date: Date) { var week = [Date]() if let startOfWeek = date.startOfWeek { for delta in 0 ... 6 { if
日期
,然后计算整个星期。我目前正在使用for循环来实现这一点,但我相信有更好更快捷的方法来实现。我想使用地图
,但我看不到:
private func selectWeek(for date: Date) {
var week = [Date]()
if let startOfWeek = date.startOfWeek {
for delta in 0 ... 6 {
if let date = Calendar.current.date(byAdding: .day, value: delta, to: startOfWeek) {
week.append(date)
}
}
calendar.selectDates(week)
}
}
您的方法是正确的,您可以使用
map
,只需在循环将要迭代的范围内调用它即可
private func selectWeek(for date: Date) {
if let startOfWeek = date.startOfWeek {
let week = (0...6).compactMap{Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
calendar.selectDates(week)
}
}
您的方法是正确的,您可以使用
map
,只需在循环将要迭代的范围内调用它即可
private func selectWeek(for date: Date) {
if let startOfWeek = date.startOfWeek {
let week = (0...6).compactMap{Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
calendar.selectDates(week)
}
}
你写的很好。如果要使用map语句,可以这样做:
let week: [Date]!
if let startOfWeek = date.startOfWeek {
week = Array(0...6).map {
Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)!
}
}
if week != nil {
calendar.selectDates(week)
}
你写的很好。如果要使用map语句,可以这样做:
let week: [Date]!
if let startOfWeek = date.startOfWeek {
week = Array(0...6).map {
Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)!
}
}
if week != nil {
calendar.selectDates(week)
}
那么:
if let startOfWeek = date.startOfWeek {
let week = (0...6).compactMap { Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek) }
calendar.selectDates(week)
}
您可以直接在范围上使用map
(或此处compactMap
)来防止非零测试。关于:
if let startOfWeek = date.startOfWeek {
let week = (0...6).compactMap { Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek) }
calendar.selectDates(week)
}
您可以直接在范围上使用
map
(或此处compactMap
来防止非零测试)。Array(0…6)
那是我丢失的片段!:-)你不需要一个数组
,你可以映射范围0…6
@gmoraleda更新了我的答案,只需使用compactMap
而不是map
即可去除nil
值。@MartinR你说得对,更新了我的答案数组(0…6)
那是我丢失的部分!:-)您不需要数组
,您可以映射范围0…6
@gmoraleda更新了我的答案,只需使用compactMap
而不是map
即可去除nil
值。@MartinR您是对的,更新了我的回答您实际上没有使用compactMap
的返回值,因此week
未定义。compactMap
也缺少其右括号。哎呀!编辑!谢谢…使用compactMap处理date(通过添加:value:to:)
可能出现的nil结果是个好主意。实际上,您没有使用compactMap的返回值,因此,week
未定义。compactMap
也缺少其右括号。哎呀!编辑!谢谢…使用compactMap处理date中可能出现的nil结果是个好主意(通过添加:value:to:)