在函数中将 Date 转换为 DateComponents 以在 Swift 3 中安排本地通知
Convert Date to DateComponents in function to schedule local notification in Swift 3
我正在尝试设置一个接受整数并在未来 n 天安排本地通知的函数。我收到无法将类型 Date 转换为 DateComponents 的错误。我还没弄清楚如何转换它。我发现了其他一些类似的问题 here and here,但我无法调整这些答案来解决 Swift 3.
如何将 Date 转换为 DateComponents?有没有更好的方法来安排通知?
在此先感谢您的帮助:)
出错的行,"Cannot convert value of type 'Date?' to expected argument type 'DateComponents'":
let trigger = UNCalendarNotificationTrigger(dateMatching: fireDateOfNotification, repeats: false)
全功能:
func scheduleNotification(day:Int) {
let date = Date()
let calendar = Calendar.current
var components = calendar.dateComponents([.day, .month, .year], from: date as Date)
let tempDate = calendar.date(from: components)
var comps = DateComponents()
//set future day variable
comps.day = day
//set date to fire alert
let fireDateOfNotification = calendar.date(byAdding: comps as DateComponents, to: tempDate!)
let trigger = UNCalendarNotificationTrigger(dateMatching: fireDateOfNotification, repeats: false) //THIS LINE CAUSES ERROR
let content = UNMutableNotificationContent()
content.title = "New Alert Title"
content.body = "Body of alert"
content.sound = UNNotificationSound.default()
let request = UNNotificationRequest(identifier: "alertNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("Uh oh! We had an error: \(error)")
}
}
}
我认为错误已经很清楚了。 UNCalendarNotificationTrigger
是为了灵活,所以你可以指定 "fire a trigger on next Friday"。您只需将下一个触发日转换为 DateComponents
:
let n = 7
let nextTriggerDate = Calendar.current.date(byAdding: .day, value: n, to: Date())!
let comps = Calendar.current.dateComponents([.year, .month, .day], from: nextTriggerDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
print(trigger.nextTriggerDate())
我正在尝试设置一个接受整数并在未来 n 天安排本地通知的函数。我收到无法将类型 Date 转换为 DateComponents 的错误。我还没弄清楚如何转换它。我发现了其他一些类似的问题 here and here,但我无法调整这些答案来解决 Swift 3.
如何将 Date 转换为 DateComponents?有没有更好的方法来安排通知?
在此先感谢您的帮助:)
出错的行,"Cannot convert value of type 'Date?' to expected argument type 'DateComponents'":
let trigger = UNCalendarNotificationTrigger(dateMatching: fireDateOfNotification, repeats: false)
全功能:
func scheduleNotification(day:Int) {
let date = Date()
let calendar = Calendar.current
var components = calendar.dateComponents([.day, .month, .year], from: date as Date)
let tempDate = calendar.date(from: components)
var comps = DateComponents()
//set future day variable
comps.day = day
//set date to fire alert
let fireDateOfNotification = calendar.date(byAdding: comps as DateComponents, to: tempDate!)
let trigger = UNCalendarNotificationTrigger(dateMatching: fireDateOfNotification, repeats: false) //THIS LINE CAUSES ERROR
let content = UNMutableNotificationContent()
content.title = "New Alert Title"
content.body = "Body of alert"
content.sound = UNNotificationSound.default()
let request = UNNotificationRequest(identifier: "alertNotification", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error {
print("Uh oh! We had an error: \(error)")
}
}
}
我认为错误已经很清楚了。 UNCalendarNotificationTrigger
是为了灵活,所以你可以指定 "fire a trigger on next Friday"。您只需将下一个触发日转换为 DateComponents
:
let n = 7
let nextTriggerDate = Calendar.current.date(byAdding: .day, value: n, to: Date())!
let comps = Calendar.current.dateComponents([.year, .month, .day], from: nextTriggerDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
print(trigger.nextTriggerDate())