読者です 読者をやめる 読者になる 読者になる

ぺぷしのーげん

大企業からスタートアップに転職したアプリケーションエンジニアのブログ

SwiftからNSTimeInterval型が消えてる?|timeIntervalSinceNowも見つからず

f:id:hazakurakeita:20150902220743j:plain

ぱくたそ - フリー写真素材・無料ダウンロード

UILocalNotificationを使って定期的に処理を実行しようとしたとき、実行間隔をUILocalNotification.fireDateに代入します。このとき代入するのがNSDate型。このサンプルプログラムはググれば無数に出てくるのですが、あることに関しては全く動作しなかったので、ここでメモ書きしときます。

 

実行間隔を変数で制御したいとき

    let notification = UILocalNotification()
    notification.fireDate = NSDate(timeIntervalSinceNow: 5)

 上のようなコードは簡単に見つかります。でもやりたいのはコレじゃないんだなー。上のは5秒後にnotificationが発生するわけですが、この何秒後っていうのを変数にして制御したいんですよね。

    let time = 5
    let notification = UILocalNotification()
    notification.fireDate = NSDate(timeIntervalSinceNow: time)

 これがダメ。ビルドエラーになります。どうもtimeIntervalSinceNowはInt型ではないらしい。調べてみると、NSTimeInterval型らしいんです。そこでInt型をNSTimeInterval型へのキャスト方法を調べます。

    let time = NSTimeInterval(5)
    let notification = UILocalNotification()
    notification.fireDate = NSDate(timeIntervalSinceNow: time)

 ソース忘れたけど、NSTmeIntervalメソッドで変換できるって複数の記事見つけました。で、やってみたらこれもだめ。というか、NSTimeIntervalメソッドが存在しないなんて言われる。全然だめじゃん。

完全に詰んだーって思ったところで下記の記事を見つけました。なんとNSTImeInterval型じゃなくて、Double型でも行けるとのこと。

stackoverflow.com

というわけで、Double型でtimeIntervalSinceNowに渡してみます。

    let time: Double = 5
    let notification = UILocalNotification()
    notification.fireDate = NSDate(timeIntervalSinceNow: time)

 これで通りました。なんでやねんって感じですが、さっき調べてみたらこんな記事が出てきました。

このNSTimeIntervalは、実はただのdoubleですから、そのまま1日の秒数で割り算すれば、日数が得られる、というわけです。

NSDateと日時の扱い(4/6):初心者のためのObjective-Cプログラミング入門

うそーん。ただのDouble型って何なん。だからNSTimeInterval型は廃止されたのかな?でもそんな情報は全くでてきませーん。

 

おしまい。