Schedule/README.md

2.5 KiB

Schedule

A interval-based and date-based job scheduler for swift.

Features

  • 📆 Date-based scheduling
  • Interval-based scheduling
  • 📝 Mixture rules scheduling
  • 🚦 Suspend, resume, cancel
  • 🏷 Tag related management
  • 🍻 No need to concern about runloop
  • 👻 No need to concern about circular reference
  • 🍭 Sweet apis

Usage

Scheduling a job can not be simplier.

func heartBeat() { }
Schedule.every(0.5.seconds).do(heartBeat)

Interval-based Scheduling

import Schedule

Schedule.after(3.seconds).do {
    print("hello")
}

Schedule.every(1.day).do { }

Schedule.after(1.hour, repeating: 1.minute).do { }

Schedule.of(1.second, 2.minutes, 3.hours).do { }

Schedule.from([1.second, 2.minutes, 3.hours]).do { }

Date-based Scheduling

import Schedule

Schedule.at(date).do { }

Schedule.every(.monday, .tuesday).at("11:11").do { }

Schedule.every(.september(30)).at("10:00:00").do { }

Schedule.of(date0, date1, date2).do { }

Schedule.from([date0, date1, date2]).do { }

Custom Scheduling

import Schedule

/// concat
let s0 = Schedule.at(birthdate)
let s1 = Schedule.every(1.year)
let birthdaySchedule = s0.concat.s1
birthdaySchedule.do { 
    print("Happy birthday")
}

/// merge
let s3 = Schedule.every(.january(1)).at(8, 30)
let s4 = Schedule.every(.october(1)).at(8, 30)
let holiday = s3.merge(s3)
holidaySchedule.do {
    print("Happy holiday")
}

/// count
let s5 = Schedule.after(5.seconds).concat(Schedule.every(1.day))
let s6 = s5.count(10)

/// until
let s7 = Schedule.every(.monday).at(11, 12)
let s8 = s7.until(date)

Job management

In genera, you don't need to care about the reference management of job. All jobs will be held by a inner shared instance jobCenter, so they won't be released, unless you do that yourself.

let job = Schedule.every(1.day).do { }

job.suspend()
job.resume()
job.cancel()    // will release this job

You also can use tag to organize jobs, and use queue to define which queue the job should be dispatched to:

let s = Schedule.every(1.day)
s.do(queue: myJobQueue, tag: "log") { }
s.do(queue: myJobQueue, tag: "log") { }

Job.suspend("log")
Job.resume("log")
Job.cancel("log")

Install

Schedul supports all popular dependency managers.

Cocoapods

pod 'Schedule'

Carthage

github "jianstm/Schedule"

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/jianstm/Schedule", from: "0.0.2")
]