我找到了一种通过
查找用户当前24小时时间的方法let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date) --> e.g.(15)
我想在此之前24小时创建一个序列数组。这方面的一个例子是
15
14
...
2
1
24
23
... and so on
我已经能够了 将列表创建为1但是没有设置为0,我无法创建一个将转到24的公式。
我目前有 -
for i in 0...24 {
var previousHours = 0
if i >= hour{
previousHours = hour - 24 + i
} else {
previousHours = hour - i
}
hoursArray.append(previousHours)
}
对于小时20,这个列表形成了 -
21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,19,20,21
而不是
小时 - 24 +我
什么公式会产生正确的结果?是否有更简单的方法来获得相同的结果?
答案 0 :(得分:0)
试试这个
for i in 1...24 {
hoursArray.append(i)
}
let myHour = 20 //like your example
let hoursAfter = hoursArray.filter { $0 > myHour }
let hoursBefore = hoursArray.filter { $0 < myHour }
let cycle = hoursAfter + hoursBefore
这里有21小时到24小时,然后是1到19小时
或者如果你换个方法,那就
cycle.reversed()
答案 1 :(得分:0)
也许喜欢这样的东西?
var hrs = [Int]()
var start = 15
while hrs.count < 24 {
if start < 24 {
hrs.append(start)
start += 1
} else {
start = 1
}
}
hrs.reverse()
使用日历计算,如上面的评论所述,这个从0到23开始计算:
var hrs = [Int]()
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
var dayComp = DateComponents()
dayComp.calendar = calendar
dayComp.hour = 0
while hrs.count < 24 {
let next = calendar.date(byAdding: dayComp, to: date)
hrs.append(calendar.component(.hour, from: next!))
dayComp.hour! -= 1
}
输出:
18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,20,19
答案 2 :(得分:0)
中公式的微小变化
hour - 24 + i
到
hour - i + 24
可以解决问题并提供您需要的输出。