每天激活一个查看周数的功能

Activate a function every day to check week

我想做一个日程应用。为此,我需要每周分开,因为时间表不同(例如:第 1 周是 A 周,第 2 周是 B 周,第 3 周是 A 周)。

我需要创建一个函数来 运行 每天确定今天是哪一周。我对函数的外观有一个抽象的想法,只是我不知道将什么传递给函数,以及如何在用户不做任何事情的情况下每天 运行 这个函数。 这是我的一些想法。

func DetermineIfWeekA(n:IntMax;something )-> Bool{
for k in 0...n{
    if (DayDifference == 14*k+3,14*k+4,14*k+5,14*k+6,14*k+7){
        return true
    }else if(DayDifference == 14*k+10,14*k+11,14*k+12,14*k+13,14*k+14){
        return false
    }
 }
}

我没有一个完美的答案给你,但根据你所说的,我有以下想法。

关于你想要的日期函数。

  • 创建一个 NSDate() 实例,它将为您提供当前日期,您可能必须使用 NSDateFormatter so it's easier to work with. Also look into NSDateComponents 来格式化您的日期,他们有一个 .weekNumber 属性.

  • 然后您需要将该周数与某种存储的周数或 switch 语句进行匹配。

  • 您的函数不一定需要采用任何参数,只需创建一个新的 NSDate。

  • 如果您将问题更新得更具体、更清楚,我也许可以提供更好的解决方案和一些代码。

关于检查"without the user doing anything".

如果您想 运行 无需用户执行任何操作(甚至打开您的应用程序)的功能。您可能希望通过执行后台提取来完成此操作。大部分工作将在 AppDelegate 中完成。

在您的 AppDelegates didFinishLaunchingWithOptions 方法中,您需要设置 MinimumBackgroundFetchInterval。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        // background fetch
        UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(
            UIApplicationBackgroundFetchIntervalMinimum)
}

然后您需要向您的 AppDelegate 添加以下方法,其中将包含您需要执行的代码。

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
      //... run task once complete call {
           completionHandler(.NewData)
      // }

    }

Ray Wenderlich 有一个很棒的后台获取教程:

http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial

经过一番研究,我想出了一个解决方案

let userCalendar = NSCalendar.currentCalendar()
let date = NSDate()
let unitFlags: NSCalendarUnit = [.Hour, .Day, .WeekOfYear, .Month, .Year]
let components = NSCalendar.currentCalendar().components(unitFlags, fromDate: date)
func DetermineIfWeekB ()->Bool {
if components.weekOfYear % 2 == 0 {
    return true
} else {
    return false
}
}

好吧,这就是我的日期函数。