gme_2
6 years ago
28 changed files with 4972 additions and 4211 deletions
-
6GME Remit.xcodeproj/project.pbxproj
-
6Podfile.lock
-
6Pods/Manifest.lock
-
8588Pods/Pods.xcodeproj/project.pbxproj
-
21Pods/SwiftyTimer/LICENSE
-
138Pods/SwiftyTimer/README.md
-
134Pods/SwiftyTimer/Sources/SwiftyTimer.swift
-
25Pods/Target Support Files/Pods-GME Remit/Pods-GME Remit-acknowledgements.markdown
-
31Pods/Target Support Files/Pods-GME Remit/Pods-GME Remit-acknowledgements.plist
-
2Pods/Target Support Files/Pods-GME Remit/Pods-GME Remit-frameworks.sh
-
6Pods/Target Support Files/Pods-GME Remit/Pods-GME Remit.debug.xcconfig
-
6Pods/Target Support Files/Pods-GME Remit/Pods-GME Remit.release.xcconfig
-
25Pods/Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests-acknowledgements.markdown
-
31Pods/Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests-acknowledgements.plist
-
2Pods/Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests-frameworks.sh
-
6Pods/Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests.debug.xcconfig
-
6Pods/Target Support Files/Pods-GMERemittanceTests/Pods-GMERemittanceTests.release.xcconfig
-
25Pods/Target Support Files/Pods-GMERemittanceUITests/Pods-GMERemittanceUITests-acknowledgements.markdown
-
31Pods/Target Support Files/Pods-GMERemittanceUITests/Pods-GMERemittanceUITests-acknowledgements.plist
-
2Pods/Target Support Files/Pods-GMERemittanceUITests/Pods-GMERemittanceUITests-frameworks.sh
-
6Pods/Target Support Files/Pods-GMERemittanceUITests/Pods-GMERemittanceUITests.debug.xcconfig
-
6Pods/Target Support Files/Pods-GMERemittanceUITests/Pods-GMERemittanceUITests.release.xcconfig
-
26Pods/Target Support Files/SwiftyTimer/Info.plist
-
5Pods/Target Support Files/SwiftyTimer/SwiftyTimer-dummy.m
-
12Pods/Target Support Files/SwiftyTimer/SwiftyTimer-prefix.pch
-
16Pods/Target Support Files/SwiftyTimer/SwiftyTimer-umbrella.h
-
6Pods/Target Support Files/SwiftyTimer/SwiftyTimer.modulemap
-
9Pods/Target Support Files/SwiftyTimer/SwiftyTimer.xcconfig
8588
Pods/Pods.xcodeproj/project.pbxproj
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,21 @@ |
|||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2015-2016 Radosław Pietruszewski |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in all |
||||
|
copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
|
SOFTWARE. |
@ -0,0 +1,138 @@ |
|||||
|
# SwiftyTimer |
||||
|
|
||||
|
![Platforms](https://img.shields.io/badge/platforms-ios%20%7C%20osx%20%7C%20watchos%20%7C%20tvos-lightgrey.svg) |
||||
|
[![CI Status](https://api.travis-ci.org/radex/SwiftyTimer.svg?branch=master)](https://travis-ci.org/radex/SwiftyTimer) |
||||
|
[![CocoaPods](http://img.shields.io/cocoapods/v/SwiftyTimer.svg)](https://cocoapods.org/pods/SwiftyTimer) |
||||
|
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](#carthage) |
||||
|
![Swift version](https://img.shields.io/badge/swift-4.2-orange.svg) |
||||
|
|
||||
|
#### Modern Swifty API for `NSTimer` |
||||
|
###### SwiftyTimer allows you to instantly schedule delays and repeating timers using convenient closure syntax. It's time to get rid of Objective-C cruft. |
||||
|
|
||||
|
Read [Swifty APIs: NSTimer](http://radex.io/swift/nstimer/) for more information about this project. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
You can easily schedule repeating and non-repeating timers (repeats and delays) using `Timer.every` and `Timer.after`: |
||||
|
|
||||
|
```swift |
||||
|
Timer.every(0.7.seconds) { |
||||
|
statusItem.blink() |
||||
|
} |
||||
|
|
||||
|
Timer.after(1.minute) { |
||||
|
println("Are you still here?") |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
You can specify time intervals with these intuitive helpers: |
||||
|
|
||||
|
```swift |
||||
|
100.ms |
||||
|
1.second |
||||
|
2.5.seconds |
||||
|
5.seconds |
||||
|
10.minutes |
||||
|
1.hour |
||||
|
2.days |
||||
|
``` |
||||
|
|
||||
|
You can pass method references instead of closures: |
||||
|
|
||||
|
```swift |
||||
|
Timer.every(30.seconds, align) |
||||
|
``` |
||||
|
|
||||
|
### Manual scheduling |
||||
|
|
||||
|
If you want to make a timer object without scheduling, use `new(after:)` and `new(every:)`: |
||||
|
|
||||
|
```swift |
||||
|
let timer = Timer.new(every: 1.second) { |
||||
|
println(self.status) |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
(This should be defined as an initializer, but [a bug in Foundation](http://www.openradar.me/18720947) prevents this) |
||||
|
|
||||
|
Call `start()` to schedule timers created using `new`. You can optionally pass the run loop and run loop modes: |
||||
|
|
||||
|
```swift |
||||
|
timer.start() |
||||
|
timer.start(modes: .defaultRunLoopMode, .eventTrackingRunLoopMode) |
||||
|
``` |
||||
|
|
||||
|
### Invalidation |
||||
|
|
||||
|
If you want to invalidate a repeating timer on some condition, you can take a `Timer` argument in the closure you pass in: |
||||
|
|
||||
|
```swift |
||||
|
Timer.every(5.seconds) { (timer: Timer) in |
||||
|
// do something |
||||
|
|
||||
|
if finished { |
||||
|
timer.invalidate() |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
## Installation |
||||
|
|
||||
|
**Note:** If you're running Swift 2, use [SwiftyTimer v1.4.1](https://github.com/radex/SwiftyTimer/tree/1.4.1) |
||||
|
|
||||
|
#### CocoaPods |
||||
|
|
||||
|
If you're using CocoaPods, just add this line to your Podfile: |
||||
|
|
||||
|
```ruby |
||||
|
pod 'SwiftyTimer' |
||||
|
``` |
||||
|
|
||||
|
Install by running this command in your terminal: |
||||
|
|
||||
|
```sh |
||||
|
pod install |
||||
|
``` |
||||
|
|
||||
|
Then import the library in all files where you use it: |
||||
|
|
||||
|
```swift |
||||
|
import SwiftyTimer |
||||
|
``` |
||||
|
|
||||
|
#### Carthage |
||||
|
|
||||
|
Just add to your Cartfile: |
||||
|
|
||||
|
```ruby |
||||
|
github "radex/SwiftyTimer" |
||||
|
``` |
||||
|
|
||||
|
#### Manually |
||||
|
|
||||
|
Simply copy `Sources/SwiftyTimer.swift` to your Xcode project. |
||||
|
|
||||
|
## More like this |
||||
|
|
||||
|
If you like SwiftyTimer, check out [SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults), which applies the same swifty approach to `NSUserDefaults`. |
||||
|
|
||||
|
You might also be interested in my blog posts which explain the design process behind those libraries: |
||||
|
- [Swifty APIs: NSTimer](http://radex.io/swift/nstimer/) |
||||
|
- [Swifty APIs: NSUserDefaults](http://radex.io/swift/nsuserdefaults/) |
||||
|
- [Statically-typed NSUserDefaults](http://radex.io/swift/nsuserdefaults/static) |
||||
|
- [Swifty methods](http://radex.io/swift/methods/) |
||||
|
|
||||
|
### Contributing |
||||
|
|
||||
|
If you have comments, complaints or ideas for improvements, feel free to open an issue or a pull request. |
||||
|
|
||||
|
### Author and license |
||||
|
|
||||
|
Radek Pietruszewski |
||||
|
|
||||
|
* [github.com/radex](http://github.com/radex) |
||||
|
* [twitter.com/radexp](http://twitter.com/radexp) |
||||
|
* [radex.io](http://radex.io) |
||||
|
* this.is@radex.io |
||||
|
|
||||
|
SwiftyTimer is available under the MIT license. See the LICENSE file for more info. |
@ -0,0 +1,134 @@ |
|||||
|
// |
||||
|
// SwiftyTimer |
||||
|
// |
||||
|
// Copyright (c) 2015-2016 Radosław Pietruszewski |
||||
|
// |
||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
// of this software and associated documentation files (the "Software"), to deal |
||||
|
// in the Software without restriction, including without limitation the rights |
||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
// copies of the Software, and to permit persons to whom the Software is |
||||
|
// furnished to do so, subject to the following conditions: |
||||
|
// |
||||
|
// The above copyright notice and this permission notice shall be included in all |
||||
|
// copies or substantial portions of the Software. |
||||
|
// |
||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
|
// SOFTWARE. |
||||
|
// |
||||
|
|
||||
|
import Foundation |
||||
|
|
||||
|
extension Timer { |
||||
|
|
||||
|
// MARK: Schedule timers |
||||
|
|
||||
|
/// Create and schedule a timer that will call `block` once after the specified time. |
||||
|
|
||||
|
@discardableResult |
||||
|
public class func after(_ interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { |
||||
|
let timer = Timer.new(after: interval, block) |
||||
|
timer.start() |
||||
|
return timer |
||||
|
} |
||||
|
|
||||
|
/// Create and schedule a timer that will call `block` repeatedly in specified time intervals. |
||||
|
|
||||
|
@discardableResult |
||||
|
public class func every(_ interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { |
||||
|
let timer = Timer.new(every: interval, block) |
||||
|
timer.start() |
||||
|
return timer |
||||
|
} |
||||
|
|
||||
|
/// Create and schedule a timer that will call `block` repeatedly in specified time intervals. |
||||
|
/// (This variant also passes the timer instance to the block) |
||||
|
|
||||
|
@nonobjc @discardableResult |
||||
|
public class func every(_ interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer { |
||||
|
let timer = Timer.new(every: interval, block) |
||||
|
timer.start() |
||||
|
return timer |
||||
|
} |
||||
|
|
||||
|
// MARK: Create timers without scheduling |
||||
|
|
||||
|
/// Create a timer that will call `block` once after the specified time. |
||||
|
/// |
||||
|
/// - Note: The timer won't fire until it's scheduled on the run loop. |
||||
|
/// Use `NSTimer.after` to create and schedule a timer in one step. |
||||
|
/// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947) |
||||
|
|
||||
|
public class func new(after interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { |
||||
|
return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, 0, 0, 0) { _ in |
||||
|
block() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// Create a timer that will call `block` repeatedly in specified time intervals. |
||||
|
/// |
||||
|
/// - Note: The timer won't fire until it's scheduled on the run loop. |
||||
|
/// Use `NSTimer.every` to create and schedule a timer in one step. |
||||
|
/// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947) |
||||
|
|
||||
|
public class func new(every interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { |
||||
|
return CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in |
||||
|
block() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// Create a timer that will call `block` repeatedly in specified time intervals. |
||||
|
/// (This variant also passes the timer instance to the block) |
||||
|
/// |
||||
|
/// - Note: The timer won't fire until it's scheduled on the run loop. |
||||
|
/// Use `NSTimer.every` to create and schedule a timer in one step. |
||||
|
/// - Note: The `new` class function is a workaround for a crashing bug when using convenience initializers (rdar://18720947) |
||||
|
|
||||
|
@nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer { |
||||
|
var timer: Timer! |
||||
|
timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in |
||||
|
block(timer) |
||||
|
} |
||||
|
return timer |
||||
|
} |
||||
|
|
||||
|
// MARK: Manual scheduling |
||||
|
|
||||
|
/// Schedule this timer on the run loop |
||||
|
/// |
||||
|
/// By default, the timer is scheduled on the current run loop for the default mode. |
||||
|
/// Specify `runLoop` or `modes` to override these defaults. |
||||
|
|
||||
|
public func start(runLoop: RunLoop = .current, modes: RunLoop.Mode...) { |
||||
|
let modes = modes.isEmpty ? [.default] : modes |
||||
|
|
||||
|
for mode in modes { |
||||
|
runLoop.add(self, forMode: mode) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// MARK: - Time extensions |
||||
|
|
||||
|
extension Double { |
||||
|
public var millisecond: TimeInterval { return self / 1000 } |
||||
|
public var milliseconds: TimeInterval { return self / 1000 } |
||||
|
public var ms: TimeInterval { return self / 1000 } |
||||
|
|
||||
|
public var second: TimeInterval { return self } |
||||
|
public var seconds: TimeInterval { return self } |
||||
|
|
||||
|
public var minute: TimeInterval { return self * 60 } |
||||
|
public var minutes: TimeInterval { return self * 60 } |
||||
|
|
||||
|
public var hour: TimeInterval { return self * 3600 } |
||||
|
public var hours: TimeInterval { return self * 3600 } |
||||
|
|
||||
|
public var day: TimeInterval { return self * 3600 * 24 } |
||||
|
public var days: TimeInterval { return self * 3600 * 24 } |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
|
<plist version="1.0"> |
||||
|
<dict> |
||||
|
<key>CFBundleDevelopmentRegion</key> |
||||
|
<string>en</string> |
||||
|
<key>CFBundleExecutable</key> |
||||
|
<string>${EXECUTABLE_NAME}</string> |
||||
|
<key>CFBundleIdentifier</key> |
||||
|
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> |
||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||
|
<string>6.0</string> |
||||
|
<key>CFBundleName</key> |
||||
|
<string>${PRODUCT_NAME}</string> |
||||
|
<key>CFBundlePackageType</key> |
||||
|
<string>FMWK</string> |
||||
|
<key>CFBundleShortVersionString</key> |
||||
|
<string>2.1.0</string> |
||||
|
<key>CFBundleSignature</key> |
||||
|
<string>????</string> |
||||
|
<key>CFBundleVersion</key> |
||||
|
<string>${CURRENT_PROJECT_VERSION}</string> |
||||
|
<key>NSPrincipalClass</key> |
||||
|
<string></string> |
||||
|
</dict> |
||||
|
</plist> |
@ -0,0 +1,5 @@ |
|||||
|
#import <Foundation/Foundation.h> |
||||
|
@interface PodsDummy_SwiftyTimer : NSObject |
||||
|
@end |
||||
|
@implementation PodsDummy_SwiftyTimer |
||||
|
@end |
@ -0,0 +1,12 @@ |
|||||
|
#ifdef __OBJC__ |
||||
|
#import <UIKit/UIKit.h> |
||||
|
#else |
||||
|
#ifndef FOUNDATION_EXPORT |
||||
|
#if defined(__cplusplus) |
||||
|
#define FOUNDATION_EXPORT extern "C" |
||||
|
#else |
||||
|
#define FOUNDATION_EXPORT extern |
||||
|
#endif |
||||
|
#endif |
||||
|
#endif |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
#ifdef __OBJC__ |
||||
|
#import <UIKit/UIKit.h> |
||||
|
#else |
||||
|
#ifndef FOUNDATION_EXPORT |
||||
|
#if defined(__cplusplus) |
||||
|
#define FOUNDATION_EXPORT extern "C" |
||||
|
#else |
||||
|
#define FOUNDATION_EXPORT extern |
||||
|
#endif |
||||
|
#endif |
||||
|
#endif |
||||
|
|
||||
|
|
||||
|
FOUNDATION_EXPORT double SwiftyTimerVersionNumber; |
||||
|
FOUNDATION_EXPORT const unsigned char SwiftyTimerVersionString[]; |
||||
|
|
@ -0,0 +1,6 @@ |
|||||
|
framework module SwiftyTimer { |
||||
|
umbrella header "SwiftyTimer-umbrella.h" |
||||
|
|
||||
|
export * |
||||
|
module * { export * } |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyTimer |
||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 |
||||
|
OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" |
||||
|
PODS_BUILD_DIR = ${BUILD_DIR} |
||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) |
||||
|
PODS_ROOT = ${SRCROOT} |
||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyTimer |
||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} |
||||
|
SKIP_INSTALL = YES |
Write
Preview
Loading…
Cancel
Save
Reference in new issue