以swift语法更新每一天

在一个报价应用程序工作,作为一个初学者,我决定排除在我的应用程序中使用CoreData和Sqlite。 所以我决定尝试一个集合,并更改文本标签。我有一个集合存储在一个数组中。 我试图实现文本每24小时更换一次,并在美国东部时间上午8:00(所以从上午8点到上午8点)发生变化。我希望轮廓是类似于

quoteindex = 0 if(time_elasped:24 hours something about 8:00 AM EST) { quote.text = quoteCollection.quoteArray[quoteIndex] quoteindex++ (next quote in array) } 

我将如何按照语法组织这样的事情? 我会用另一个循环吗?

一个简单的方法就是使用NSUserDefaults来存储一个包含上一次检索报价的最后一次和索引的NSDictionary。

在viewDidLoad中:(或者做成独立函数 – checkLastRetrieval())

 let userDefaults = NSUserDefaults.standardUserDefaults() if let lastRetrieval = userDefaults.dictionaryForKey("lastRetrieval") { if let lastDate = lastRetrieval["date"] as? NSDate { if let index = lastRetrieval["index"] as? Int { if abs(lastDate.timeIntervalSinceNow) > 86400 { // seconds in 24 hours // Time to change the label var nextIndex = index + 1 // Check to see if next incremented index is out of bounds if self.myQuoteArray.count <= nextIndex { // Move index back to zero? Behavior up to you... nextIndex = 0 } self.myLabel.text = self.myQuoteArray[nextIndex] let lastRetrieval : [NSObject : AnyObject] = [ "date" : NSDate(), "index" : nextIndex ] userDefaults.setObject(lastRetrieval, forKey: "lastRetrieval") userDefaults.synchronize() } // Do nothing, not enough time has elapsed to change labels } } } else { // No dictionary found, show first quote self.myLabel.text = self.myQuoteArray.first! // Make new dictionary and save to NSUserDefaults let lastRetrieval : [NSObject : AnyObject] = [ "date" : NSDate(), "index" : 0 ] userDefaults.setObject(lastRetrieval, forKey: "lastRetrieval") userDefaults.synchronize() } 

你可以更具体的使用NSDate,如果你想确保一个特定的时间(如8AM)或确保每个实际的一天(星期一,星期二等)有一个独特的报价。 如果用户在24小时前见过报价,则此示例只是简单地更改标签。

查看NSUserDefaults的文档。

编辑 :如果你想在新的报价的第二天早上8点通知用户,你可以发送一个本地通知给用户。

 let notification = UILocalNotification() notification.fireDate = NSDate(timeIntervalSinceNow: someTimeInterval) notification.timeZone = NSCalender.currentCalendar().timeZone notification.alertBody = "Some quote" // or "Check the app" notiication.hasAction = true notification.alertAction = "View" application.scheduleLocalNotification(notification) 

你必须计算timeInterval是第二天上午8点的任何时间。 检查这个答案: https : //stackoverflow.com/a/15262058/2881524 (这是objective-c,但你应该能够弄清楚)

编辑

要在视图进入前台时执行代码,您需要在AppDelegate的applicationWillEnterForeground方法中发布通知。 并在视图控制器中添加该通知的观察者。

AppDelegate

 let notification = NSNotification(name: "CheckLastQuoteRetrieval", object: nil) NSNotificationCenter.defaultCenter().postNotification(notification) 

ViewController中

  override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("checkLastRetrieval"), name: "CheckLastQuoteRetrieval", object: nil) checkLastRetrieval() }