Swift - 声明没有值的全局NSDate

时间:2016-01-30 10:41:11

标签: swift nsdate global

我想在我的应用中创建一个全局NSDate,因为我想保存第一次在此变量中打开应用程序的日期。我写 “var LaunchDate = NSDate()”在声明第一个视图控制器的主类之前,在viewdidload中,如果它是第一次打开应用程序,它会将日期保存到全局变量LaunchDate中。但每次我打开应用程序时,由于“var LaunchDate = NSDate()”,它会保存当前日期。  我没有找到解决方案,你是否有任何想法宣布一个全球日期而没有给出当前日期?

4 个答案:

答案 0 :(得分:4)

您可以使用NSUserDefaults来存储值。

代码检查是否存在值 如果是,则读取值,如果没有则写入当前日期。

var launchDate : NSDate!

let defaults = NSUserDefaults.standardUserDefaults()
if let dateOfFirstLaunch = defaults.objectForKey("dateOfFirstLaunch") as? NSDate {
  launchDate = dateOfFirstLaunch
} else {
  let currentDate = NSDate()
  defaults.setObject(currentDate, forKey:"dateOfFirstLaunch")
  launchDate = currentDate
}

答案 1 :(得分:0)

试试这个:

override func viewDidLoad() {
    var LaunchDate: NSDate

    // when you want to set the value for it:
    LaunchDate = NSDate()
}

问题,你试图做的NSDate()是一个函数,它返回当前日期的值。

答案 2 :(得分:0)

  

全局变量是在any之外定义的变量   函数,方法,闭包或类型上下文

struct globalDate 
{
   static var LaunchDate = NSDate()
}

在swift中,如果将变量封装在struct中,则可以在任何类中访问它。

Document

Global Variable

答案 3 :(得分:0)

我会使用NSUserDefaults的单例模式。

代码应该是这样的

import Foundation

class UserDefaults {
    static let sharedInstance = UserDefaults()

    var launchDate: NSDate? {
        get {
            return NSUserDefaults.standardUserDefaults().objectForKey("launch_date") as? NSDate
        }
        set {
            NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "launch_date")
        }
    }
}

使用此代码访问它

UserDefaults.sharedInstance.launchDate