每天激活一个功能来检查一周

时间:2016-01-02 03:25:08

标签: swift nsdate

我想制作一个计划应用程序。要做到这一点,我需要每周分开,因为时间表是不同的(例如:第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
    }
 }
}

2 个答案:

答案 0 :(得分:2)

我没有给你一个完美的答案,但这是基于你所说的我的想法。

关于您想要的日期功能。

  • 创建一个NSDate()实例,它会为您提供当前日期,您可能需要使用NSDateFormatter设置日期格式,以便更轻松地使用。另请查看NSDateComponents,它们有.weekNumber属性。

  • 您希望然后将该周数与某种存储的周数或切换语句进行匹配。

  • 您的功能并不一定需要采取任何参数来制作新的NSDate。

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

关于检查"没有用户做任何事情"。

如果你想在没有用户做任何事情的情况下运行该功能(比如打开你的应用程序)。您可能希望通过执行后台提取来执行此操作。大部分工作将在AppDelegate中完成。

在您的AppDelegates didFinishLaunchingWithOptions方法中,您需要setMinimumBackgroundFetchInterval。

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

答案 1 :(得分:1)

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

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
}
}

这就是我对日期函数所拥有的。