19838


アプリ開発初心者です。

アプリ終了時にNSDateを取得し、NSUserDefaultsで保存して、  
アプリ起動時に保存したNSDateを元に時間の差分を取得したいのですが、  
下記コード内の、dateをbackgroundDateに代入することが出来ません。  
どのようにすればよいでしょうか？

回答、お願い致します。

[code]

    var backgroundDate: NSDate!
    
            func  addNotification() {
                    // 通知の登録
                    NSNotificationCenter.defaultCenter().addObserver(self, selector: "didBecomeActive:", name: UIApplicationDidBecomeActiveNotification, object: nil)
    
                    NSNotificationCenter.defaultCenter().addObserver(self, selector: "willTerminate:", name: UIApplicationWillTerminateNotification, object: nil)
                }
    
            //フォアグラウンド移行時の処理
            func enterForeground(notification: NSNotification){
                print("applicationWillEnterForeground")
    
                //読み込み
                let date: AnyObject! = NSUserDefaults.standardUserDefaults().objectForKey("backdate");
                backgroundDate = date
                let timeDiff = Int(NSDate().timeIntervalSinceDate(backgroundDate))
                print("経過時間 : \(timeDiff)")
    
            //フリックしてアプリ終了時の処理
            func willTerminate(notification: NSNotification){
                print("applicationWillTerminate")
    
            //保存
                // NSUserDefaults.standardUserDefaults().setObject(NSData(), forKey:"backdate"); // NSData -> NSDate
                NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey:"backdate")
                NSUserDefaults.standardUserDefaults().synchronize();
                }
    
[/code]


CC BY-SA 3.0
2015-12-10T02:42:22.563
19832
2015-12-10T07:50:27.097
2015-12-10T03:10:40.783
7362
13606
question
ios swift xcode
Swift NSUserDefaultsでNSDateを保存

[code]

    //読み込み
    let date: AnyObject! = NSUserDefaults.standardUserDefaults().objectForKey("backdate");
    
[/code]

この行を、

[code]

    let date: NSDate = NSUserDefaults.standardUserDefaults().objectForKey("backdate") as! NSDate
    
[/code]

にしましょう。  
Swiftは、型に厳密で、暗黙的なキャストというものはしてくれません。（しないがゆえに、型推論が可能になっているともいえます）  
`NSUserDefaults`クラスの`objectForKey()`メソッドは、AnyObject?型を返します。このままでは`NSDate`のインスタンスとして使えませんから、`as!
NSDate`（あるいは`as? NSDate`）でダウンキャストしてやります。


CC BY-SA 3.0
2015-12-10T04:32:55.367
19838
2015-12-10T07:50:27.097
2015-12-10T07:50:27.097
7362
7362
19832
answer