Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

iPhoneアプリ開発・SwiftでtimeIntervalSinceNow使ってx秒後を生成しようと思ったらつまづいた

簡単な料理の時に使えるタイマーアプリを
iPhoneアプリ開発の学習のために作ってました。

で、iPhoneがバックグランドにいく時に
notificationを登録しようとしました。

要件としては、x秒後にnotificationを鳴らすというやつで
見つけたサンプルで10秒後だと以下の通りでした。

        var notification = UILocalNotification()
        notification.fireDate = NSDate(timeIntervalSinceNow: 10) // すぐに通知したいので10秒後を取得
        notification.timeZone = NSTimeZone.defaultTimeZone()
        notification.alertBody = "10秒経ちました"
        notification.alertAction = "OK"
        notification.soundName = UILocalNotificationDefaultSoundName
        UIApplication.sharedApplication().scheduleLocalNotification(notification)

で、このままだと10秒後にnotification来るので、
x秒後、つまりViewControllerから渡された変数の値によって
適切にnotificationが届くようにしようと思いました。

        // xSecondsLeftは定義済み。残り秒xがIntで格納されてる
        count = xSecondsLeft
        notification.fireDate = NSDate(timeIntervalSinceNow: count)

こんな感じにするとエラーが出ました。

で、調べてみると
timerIntervalSinceNowの引数としてNSTimerInterval型じゃないといけなかったらしく

        count = NSTimerInterval(xSecondsLeft)
        notification.fireDate = NSDate(timeIntervalSinceNow: count)

のようにすると無事動きましたw
単に10という数字を入れていたときは、
多分型が自動推論されてたんだと思います。
おそろしや・・・