iOS通知触发器:每两周和/或每季度一次

我似乎无法find任何苹果文档这个确切的情况,我已经尝试了各种方式来做到这一点,我一直空着。

我想安排一个重复的通知( iOS 10+所以UNCalendarNotificationTrigger或等效)。
这些是本地通知 推送通知。

我的目标:

安排重复的通知:

  • 每两周一次 (例如,每隔一个星期二)
  • 每季度一次 (例如, 每三个月一次

我目前的做法:

这些触发器运行良好,并且易于实现(在Swift Playground中运行代码)。

 // Every day at 12pm var daily = DateComponents() daily.hour = 12 let dailyTrigger = UNCalendarNotificationTrigger(dateMatching: daily, repeats: true) dailyTrigger.nextTriggerDate() // "Jan 4, 2017, 12:00 PM" // Every Tuesday at 12pm var weekly = DateComponents() weekly.hour = 12 weekly.weekday = 3 let weeklyTrigger = UNCalendarNotificationTrigger(dateMatching: weekly, repeats: true) weeklyTrigger.nextTriggerDate() // "Jan 10, 2017, 12:00 PM" // The 1st of every month at 12pm var monthly = DateComponents() monthly.hour = 12 monthly.day = 1 let monthlyTrigger = UNCalendarNotificationTrigger(dateMatching: monthly, repeats: true) monthlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM" // Every 1st of February at 12pm var yearly = DateComponents() yearly.hour = 12 yearly.day = 1 yearly.month = 2 let yearlyTrigger = UNCalendarNotificationTrigger(dateMatching: yearly, repeats: true) yearlyTrigger.nextTriggerDate() // "Feb 1, 2017, 12:00 PM" 

但…

我似乎无法得到一个fortnightlyquarterly触发function正常。

 // Every second Tuesday at 12pm // ... There is no "date.fortnight", is this possible? // The 1st of every quarter at 12pm var quarterly = DateComponents() quarterly.hour = 12 quarterly.day = 4 // Values: 1, 2, 3 or 4 all produce the same "nextTriggerDate" - why? quarterly.quarter = 4 let quarterlyTrigger = UNCalendarNotificationTrigger(dateMatching: quarterly, repeats: true) quarterlyTrigger.nextTriggerDate() 

所以,要清楚的是,我的问题是:

  1. 是否有可能获得每两周重复一次的通知?
  2. 我们如何每季度触发一次?

由于DateComponents()有一个quarter单位,所以我认为每个quarterly都可以触发。 然而,对于每两周提醒,我甚至不确定这是否可能…

任何有识之士将不胜感激!

我没有看到任何直接的选项触发两周通知。从我的结尾指示。

1) 是否有可能获得每两周重复一次的通知?

我提出两个select:

  1. 我们可以使用UNTimeIntervalNotificationTrigger以两周的时间间隔重复通知吗? 下面的例子

     let timeInterValFor2Weeks = 1190507.790425003 let intervalTrigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterValFor2Weeks, repeats: true)//"Jan 3, 2017, 5:24 PM" intervalTrigger.nextTriggerDate() //"Jan 17, 2017, 12:05 PM" 
  2. 安排两个UNCalendarNotificationTrigger触发器,它应该触发一个月的第一天和第三天。 例如,它应该在一个月的第一个星期天和第三个星期天发出通知。

     var fortnightPart1 = DateComponents() fortnightPart1.weekday = 1 //(Day..here Sunday) fortnightPart1.weekdayOrdinal = 2 //= n == (nth Day in the month...here 2nd Sunday in every month month) fortnightPart1.hour = 12 let fortnightTrigger = UNCalendarNotificationTrigger(dateMatching: fortnightPart1, repeats: true) fortnightPart1.nextTriggerDate() 

2) 我们如何每季度触发一次?

如果没有可用的直接选项,那么我build议与上面相同的解决scheme。