• This repository has been archived on 25/Aug/2019
  • Stars
    star
    919
  • Rank 49,718 (Top 1.0 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 11 years ago
  • Updated about 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple utility for only executing code every so often.

Rate Limit

Version Build Status Swift Version Carthage compatible CocoaPods compatible

Simple utility for only executing code every so often.

This will only execute the block passed for a given name if the last time it was called is greater than limit or it has never been called.

This is really handy for refreshing stuff in viewDidAppear: but preventing it from happening a ton if it was just refreshed.

Rate Limit is fully thread-safe. Released under the MIT license.

Usage

We’ll start out with a TimedLimiter:

// Initialize with a limit of 5, so you can only use this once every 5 seconds.
let refreshTimeline = TimedLimiter(limit: 5)

// Call the work you want to limit by passing a block to the execute method.
refreshTimeline.execute {
    // Do some work that runs a maximum of once per 5 seconds.
}

Limiters aren’t persisted across application launches.

Synchronous Limiters

TimedLimiter conforms to the SyncLimiter protocol. This means that the block you pass to execute will be called synchronously on the queue you called it from if it should fire. TimedLimiter uses time to limit.

CountedLimiter is also included. This works by taking a limit as a UInt for the maximum number of times to run the block.

The SyncLimiter protocol has a really neat extension that let’s you do things like this:

let funFactLimiter = CountedLimiter(limit: 2)
let funFact = funFactLimiter.execute { () -> String in
    // Do real things to get a fun fact from a list
    return "Hi"
}

Now funFact is a String?. It’s just an optional of whatever you return from the block. The returned value will be nil if the block didn’t run.

You can of course make your own SyncLimiters too!

Asynchronous Limiter

One AsyncLimiter is included. You can make your own too. The included async limiter is DebouncedLimiter. This is perfect for making network requests as a user types or other tasks that respond to very frequent events.

The interface is slightly different:

let searchLimiter = DebouncedLimiter(limit: 1, block: performSearch)

func textDidChange() {
  searchLimiter.execute()
}

You would have to setup the limiter in an initializer since it references an instance method, but you get the idea. The block will be called at most once per second in this configuration.

Pretty easy!

Open up the included Xcode project for an example app and tests.

Installation

Carthage

Carthage is the recommended way to install Rate Limit. Add the following to your Cartfile:

github "soffes/RateLimit"

CocoaPods

Add the following to your Podfile:

pod "RateLimit"

Then run pod install.

More Repositories

1

SAMKeychain

Simple Objective-C wrapper for the keychain that works on Mac and iOS
Objective-C
5,401
star
2

sstoolkit

A collection of well-documented iOS classes for making life easier
Ruby
3,320
star
3

cheddar-ios

Cheddar for iOS
Objective-C
3,005
star
4

Countdown

Mac screensaver for counting down to a date
Swift
959
star
5

SSPullToRefresh

Simple and highly customizable pull to refresh view
Objective-C
886
star
6

Clock.saver

Simple clock screensaver written in Swift
Swift
794
star
7

HotKey

Simple global shortcuts in macOS
Swift
759
star
8

GradientView

Easily use gradients in UIKit for iOS & tvOS
Swift
626
star
9

Motivation

Mac screen saver that terrifyingly shows your age
Swift
558
star
10

SyntaxKit

TextMate-style syntax highlighting
Swift
469
star
11

ssdatakit

Eliminate your Core Data boilerplate code
Objective-C
453
star
12

JSON

Micro framework for easily parsing JSON in Swift with rich error messages in less than 100 lines of code
Swift
386
star
13

Crypto

Swift CommonCrypto wrapper
Swift
329
star
14

hue

Work with Philips Hue from Ruby
Ruby
311
star
15

ssmessagesviewcontroller

iOS Messages.app style table view controller
Objective-C
283
star
16

X

Easier cross platform Mac & iOS development with Swift
Swift
278
star
17

cheddar-mac

Cheddar for Mac
Objective-C
256
star
18

valio

Valio Con 2014 Schedule
Swift
255
star
19

cheddarkit

Objective-C framework that powers Cheddar for iOS and Cheddar for Mac
Objective-C
239
star
20

ISO8601

ISO8601 date parser and writer
Swift
220
star
21

Cache

Swift caching library
Swift
213
star
22

sscatalog

Deprecated demo of SSToolkit
Objective-C
195
star
23

SAMTextView

Add a placeholder to UITextView.
Objective-C
194
star
24

SAMCategories

A collection of useful Foundation and UIKit categories.
Objective-C
179
star
25

SAMBadgeView

Simple badge view for iOS
Objective-C
179
star
26

bully

Simple Pusher Objective-C client
Objective-C
172
star
27

coins

Bitcoin value tracker
Swift
165
star
28

Color

Color utilities for macOS, iOS, tvOS, and watchOS
Swift
156
star
29

quesadilla

Entity-style text parsing
Ruby
143
star
30

SAMSoundEffect

Play a sound effect
Objective-C
135
star
31

unmarkdown

Convert HTML to Markdown. Sometimes you just need to go the other way.
Ruby
132
star
32

WhatColorIsIt

Time of day as a color as a Mac screen saver
Swift
127
star
33

Diff

Simple diff library in pure Swift
Swift
120
star
34

contrast

Contrast for macOS
Swift
95
star
35

soff.es

My old website
CSS
95
star
36

apple_push_notification

Rails plugin for Apple Push Notifications
Ruby
94
star
37

Mixpanel

Unofficial Swift Mixpanel client
Swift
93
star
38

awfulrecruiters.com

Previously, a list of third-party recruiter domains
CSS
89
star
39

CommonCrypto

CommonCrypto Swift module
89
star
40

markdownr.com

A nifty markdown notepad
Ruby
89
star
41

Canvas

Hacking on the remains of Canvas. Nothing to see yet.
Swift
86
star
42

ssoauthkit

Handy iOS library for connecting to OAuth 1.0 providers and working with Twitter authentication
Objective-C
84
star
43

bar

My Cocktail Menu
Swift
77
star
44

lagunitas

A Ruby gem for inspecting iOS IPAs
Ruby
71
star
45

grater

CSS grids as easy to use as a cheese grater
Ruby
69
star
46

sspersonviewcontroller

Clone of Apple's ABPerson view controller in AddressBookUI.framework to allow for better customization.
Objective-C
68
star
47

sstableviewcell

A fast table view cell based on ABTableViewCell
Objective-C
66
star
48

SAMCircleProgressView

Determinate, circular progress view.
Objective-C
66
star
49

dotfiles

~soffes
Shell
62
star
50

ZoomIn

Safari extension for opening Zoom right away
Swift
61
star
51

SAMCoreImageView

Fast image view for CIImage's
Objective-C
58
star
52

json-benchmarks

Benchmarks of various JSON frameworks on iOS
Objective-C
58
star
53

spotlight-tools

Spotlight Tools for macOS
Swift
57
star
54

SAMCubicSpline

Cubic splines made easy.
Objective-C
57
star
55

SAMWebView

Push UIWebView to its limits
Objective-C
55
star
56

Pugs

Simple pug photo viewer for iOS
Swift
51
star
57

SAMTextField

Handy UITextField additions like insetting text.
Objective-C
50
star
58

ssindicatorlabel

Label + indicator
Objective-C
48
star
59

SharedWebCredentials

Swift library for easily working with Shared Web Credentials for iOS
Swift
48
star
60

sublime

My Sublime Text 3 configuration
47
star
61

words

Example Thesaurus app written in Swift
Swift
47
star
62

soffes.blog

Jekyll but more complicated than it needs to be because reasons
Ruby
46
star
63

playground

A simple Ruby gem for converting Markdown into Swift playgrounds
CSS
46
star
64

MarkdownKit

Fancy Markdown input with TextKit powered by CommonMark
C
43
star
65

home-old

Home Assistant configuration
YAML
42
star
66

binary_plist

Easily add the Apple Binary Plist format to your Rails controllers
Ruby
42
star
67

SAMLabel

A simple subclass of UILabel with vertical alignment and text insets.
Objective-C
40
star
68

whisky-fire

A glorious screen saver of Nick Offerman drinking whisky
Swift
35
star
69

findi

Find your iPhone through Apple's API's.
Ruby
33
star
70

coins-android

Coins for Android
Java
30
star
71

pizzazz

A simple, pure Ruby implementation of JSON code coloring
Ruby
30
star
72

universal-ipad-iphone-example

Example universal iPad/iPhone app
Objective-C
30
star
73

no-itunes

Joke invisible app to kill iTunes as soon as it launches
Swift
27
star
74

iphone-plist

iPhone plist tutorial
Objective-C
27
star
75

SAMContentMode

UIContentMode & CGRect Maths
Objective-C
27
star
76

fat

I'm fat.
JavaScript
24
star
77

SAMLoadingView

Simple loading views
Objective-C
20
star
78

Snake

Snake implemented in SwiftUI for macOS
Swift
19
star
79

Heads

Bust out of windows prototype
Swift
18
star
80

k-and-r

Code examples and exercises from the K&R
C
18
star
81

hire

Hire Me
CSS
17
star
82

SAMHUDView

Kinda okay HUD for iOS.
Objective-C
16
star
83

hands

Simple Poker Gem
Ruby
16
star
84

blog

Content for my blog
Ruby
16
star
85

useshares.com

Website for Shares iPhone app
CSS
15
star
86

tweets

All of my tweets.
JavaScript
14
star
87

tweets-from

Simple iPhone application using MapKit to visualize Twitter timeline locations.
Objective-C
14
star
88

shares-support

Supporting Files & Artwork for Shares
Ruby
14
star
89

van

Home Assistant configuration for my van
JavaScript
13
star
90

tomatomovies

Simple tweets when good new movies hit the theaters with their rating.
Ruby
13
star
91

SAMAddressBar

Clone of Safari's address bar from long ago.
Objective-C
13
star
92

sstoolk.it

SSToolkit Website
Ruby
13
star
93

langtons-ant

Langton’s Ant macOS screen saver written in Swift
Swift
12
star
94

samandellen.com

This is our little website
HTML
12
star
95

wwdchike.com

June 12th, 2016 — 2pm at Lands End
HTML
12
star
96

usewhiskey.com

Whiskey Website
SCSS
12
star
97

discover

Ruby Gem for discovering UPNP devices with SSDP
Ruby
11
star
98

shares-l10n

Localization files for Shares
Ruby
11
star
99

getcoinsapp.com

Website for Coins
CSS
11
star
100

private-json-test

JSON parsing example with private iPhone frameworks
Objective-C
9
star