如何在Swift3中执行timeIntervalSinceNow?

时间:2016-09-21 00:29:14

标签: ios swift nsdate swift3 nstimeinterval

我正在发布通知并观看教程,当我输入时:

notification.fireDate = NSDate(timeIntervalSinceNow: 0)

它说

  

参数标签'(timeIntervalSinceNow :)'与任何可用的匹配   重载

我该如何解决这个问题?这是我的代码:

import UIKit
import UserNotifications

class ViewController: UIViewController {
    var timer = Timer()
    var time = 10
    override func viewDidLoad() {
        super.viewDidLoad()
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: Selector(("Notification")), userInfo: nil, repeats: true)
        // Do any additional setup after loading the view, typically from a nib.
    }
    func notification() {
        time -= 1
        if time <= 0 {
            let notification = UILocalNotification()
            notification.alertAction = "Call"
            notification.alertBody = "You have a call right now"
            notification.fireDate = NSDate(timeIntervalSinceNow: 0)
            UIApplication.shared.scheduleLocalNotification(notification)
            timer.invalidate()
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func pushNotification(_ sender: AnyObject) {
        let AlertView = UIAlertController(title: "Time for your call!", message: "Press go to continue", preferredStyle:  .alert)
        AlertView.addAction(UIAlertAction(title: "Go", style: .default, handler: nil))
        self.present(AlertView, animated: true, completion: nil)
    }
}

2 个答案:

答案 0 :(得分:1)

如果您希望现在开火日期,那就是:

notification.fireDate = Date()

正如Leo在别处指出的那样,选择器不正确。它应该是:

weak var timer: Timer?
var time = 10

override func viewDidLoad() {
    super.viewDidLoad()

    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleTimer(_:)), userInfo: nil, repeats: true)
}

func handleTimer(_ timer: Timer) {
    time -= 1

    if time <= 0 {
        let notification = UILocalNotification()

        notification.alertAction = "Call"
        notification.alertBody = "You have a call right now"
        notification.fireDate = Date()

        UIApplication.shared.scheduleLocalNotification(notification)

        timer.invalidate()
    }
}

然后你问:

  

这肯定有效,但现在我离开应用程序时没有收到通知

您离开应用时没有收到通知,因为当应用未运行时Timer不会继续触发。最好完全取消计时器,并立即安排本地通知所需的时间。例如,要在10秒内安排本地通知:

override func viewDidLoad() {
    super.viewDidLoad()

    scheduleLocalNotification(delay: 10)
}

func scheduleLocalNotification(delay: TimeInterval) {
    let notification = UILocalNotification()

    notification.alertAction = "Call"
    notification.alertBody = "You have a call right now"
    notification.fireDate = Date().addingTimeInterval(delay)

    UIApplication.shared.scheduleLocalNotification(notification)
}

答案 1 :(得分:1)

Swift 3

let minute:TimeInterval = 11.0 * 60.0;
Date(timeIntervalSinceNow: minute);

到现在为+11分钟。