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