我如何 运行 从 swift 中的用户输入发出警报

How do I run an alarm from user input in swift

到目前为止,我已经创建了一个循环,它接受用户输入并将其与当前时间进行比较,如果匹配则发出警报。当我 运行 这样做时,它 运行 的使用率为 99% CPU,这让我的电脑几乎无法使用。我正在寻找一种方法 运行 以低得多的优先级或更好的优先级来替代循环。我看到的所有其他答案要么没有解决用户通过文本输入的问题,要么不在 swift 中。非常感谢任何帮助,下面是比较两个时间的函数,alarmHour 和 alarmMinute 变量是用户输入的变量。

func runTimer() {
    var rightTime:Bool
    do {
        let date = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
        let hour = String(components.hour)
        let minutes = String(components.minute)
        if (hour == globe.alarmHour && minutes == globe.alarmMinutes){
            rightTime = true
        } else {
            rightTime = false
        }
    } while (rightTime == false)
    if (rightTime == true) {
        prepareAudio()
        AlarmSound.play()
    }

}

呃。由于您概述的原因,您的 do/while 循环实际上是一种非常糟糕的方法。

在大多数情况下,NSTimer 是可行的方法。查看“scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:”方法。

您创建一个计时器并安排它,它会在所需时间调用您的选择器。

NSTimers 并不完全准确。它们可以关闭大约 50 毫秒,但向用户显示警报没问题。