2016-11-11 75 views
0

我试图每天从午夜开始选择数组的新元素,然后一旦使用了所有元素,就跳回到数组的开始位置。最好的办法是什么?这是迄今为止我所拥有的。如何每天打印一个新的数组元素?

import UIKit 

var wordsArray = [String]() 

wordsArray = ["Hallo","Apfel","Geburtstag","Pherd","Angst"] 

let date = NSDate() 
let calendar:NSCalendar! = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian) 
var dateComponents = DateComponents() 
dateComponents.day = 1 

while wordsArray (0..<2) { 
    gregorian.date(byAdding: NSCalendar.Unit.day, value: $0, to: now, options: NSCalendar.Options(rawValue: 0)) 
} 
+1

你的问题是如何“跳回阵列的开始”或者每个午夜如何显示某些东西? –

回答

0

如果我理解你的权利,你要天天使用某个数组元素,这些元素应该被循环选择。
所以主要问题是如何在午夜每天做点什么。
这可以使用取得了Timer

// First determine coming midnight 
let calendar = NSCalendar.current 
let nextDay = calendar.date(byAdding: .day, value: 1, to: Date()) 
let comingMidnight = calendar.startOfDay(for: nextDay!) 

// Then start a time coming midnight, and repeat it every day 
// Please note that 24 * 60 * 60 is not completely correct considering daylight saving times 
// Sometimes days have 23 hours and sometimes 25 hours! 
_ = Timer.init(fireAt: comingMidnight, interval: 24 * 60 * 60, target: self, selector: Selector(("timerFired")), userInfo: nil, repeats: true) 

// And this is the timer callback: 
func timerFired(timer: Timer) { 
    // Here you can select the next element in your array, any do what is required 
    // For selecting the elements cyclically, see the other answers! 
} 

此代码尚未经过测试,但它应该给你一个想法如何继续。

+0

谢谢!这真的很有帮助。 –

0

包裹阵列周围使用模运算符,它devides index/number of items in the array并返回除法的余数 - 在这种情况下总是0...4

let wordsArray = ["Hallo","Apfel","Geburtstag","Pferd","Angst"] 

for i in 0..<10 { 
    print(wordsArray[i % wordsArray.count]) 
} 

在代码中创建一个索引变量

var index = 0 

并以这种方式递增

index = (index + 1) % wordsArray.count 
-1

这是我能想到的最简单的方法。

var wordsArray = [String]() 
    wordsArray = ["Hallo","Apfel","Geburtstag","Pherd","Angst"] 
    let secondsInDay = (60 * 60 * 24) 
    let dayNumber = Int(NSDate().timeIntervalSince1970/Double(secondsInDay)) 
    let selectedNumber = dayNumber % wordsArray.count 
    let chosenWord = wordsArray[selectedNumber] 
    print(chosenWord) 

编辑:另一种方法,希望满足投诉

var wordsArray = [String]() 
    wordsArray = ["Hallo","Apfel","Geburtstag","Pherd","Angst"] 

    let calendar = Calendar(identifier: .gregorian) 
    let date = Date() 
    let yearNumber = calendar.component(.year, from: date) 
    let monthNumber = calendar.component(.month, from: date) 
    let dayNumber = calendar.component(.day, from: date) 

    let daysInYear = Double(yearNumber) * 12.0 * 365.25 
    let daysInMonth = Double(monthNumber) * 30.42 
    let totalNumber = daysInYear + daysInMonth + Double(dayNumber) 

    let selectedNumber = Int(totalNumber) % wordsArray.count 
    let chosenWord = wordsArray[selectedNumber] 

    print(chosenWord) 
+2

**不要**在一天中使用'60 * 60 * 24',这不需要是正确的。在夏令时的地区,一天可以有23,24或25小时。始终使用适当的日历方法。 –

+0

但它的所有平均值相同....这将在技术上进行小的调整... – Sethmr

+0

@MartinR我添加了另一种使用日历组件的方法,但仍使用平均值。以这种方式设计它的重点是确保无论App持续运行多少天,它总是第二天在阵列中的下一行。如果将它放在一起,只考虑每月或每年的哪一天,则会在相应的月份/年份的开始处重置循环。 – Sethmr

相关问题