Untitled diff

Created Diff never expires
7 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
52 lines
7 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
52 lines
import Foundation.NSNotification
import Foundation.NSNotification
#if !COCOAPODS
#if !COCOAPODS
import PromiseKit
import PromiseKit
#endif
#endif


/**
/**
To import the `NSNotificationCenter` category:
To import the `NSNotificationCenter` category:


use_frameworks!
use_frameworks!
pod "PromiseKit/Foundation"
pod "PromiseKit/Foundation"


Or `NSNotificationCenter` is one of the categories imported by the umbrella pod:
Or `NSNotificationCenter` is one of the categories imported by the umbrella pod:


use_frameworks!
use_frameworks!
pod "PromiseKit"
pod "PromiseKit"


And then in your sources:
And then in your sources:


import PromiseKit
import PromiseKit
*/
*/
extension NSNotificationCenter {
extension NSNotificationCenter {
public class func once(name: String) -> NotificationPromise {
public class func once(name: String) -> NotificationPromise<[NSObject: AnyObject]> {
return NSNotificationCenter.defaultCenter().once(name)
return NSNotificationCenter.defaultCenter().once(name)
}
}


public func once(name: String) -> NotificationPromise {
public func once(name: String) -> NotificationPromise<[NSObject: AnyObject]> {
let (promise, fulfill) = NotificationPromise.go()
let (promise, fulfill) = NotificationPromise<[NSObject: AnyObject]>.go()
let id = addObserverForName(name, object: nil, queue: nil, usingBlock: fulfill)
let id = addObserverForName(name, object: nil, queue: nil, usingBlock: fulfill)
promise.then(on: zalgo) { _ in self.removeObserver(id) }
promise.then(on: zalgo) { _ in self.removeObserver(id) }
return promise
return promise
}
}
}
}


public class NotificationPromise: Promise<[NSObject: AnyObject]> {
public class NotificationPromise<T>: Promise<T> {
private let (parentPromise, parentFulfill, _) = Promise<NSNotification>.pendingPromise()
private let (parentPromise, parentFulfill, _) = Promise<NSNotification>.pendingPromise()


public func asNotification() -> Promise<NSNotification> {
public func asNotification() -> Promise<NSNotification> {
return parentPromise
return parentPromise
}
}


private class func go() -> (NotificationPromise, (NSNotification) -> Void) {
private class func go() -> (NotificationPromise<[NSObject: AnyObject]>, (NSNotification) -> Void) {
var fulfill: (([NSObject: AnyObject]) -> Void)!
var fulfill: (([NSObject: AnyObject]) -> Void)!
let promise = NotificationPromise { f, _ in fulfill = f }
let promise = NotificationPromise<[NSObject: AnyObject]> { f, _ in fulfill = f }
promise.parentPromise.then { fulfill($0.userInfo ?? [:]) }
promise.parentPromise.then { fulfill($0.userInfo ?? [:]) }
return (promise, promise.parentFulfill)
return (promise, promise.parentFulfill)
}
}


private override init(@noescape resolvers: (fulfill: ([NSObject: AnyObject]) -> Void, reject: (ErrorType) -> Void) throws -> Void) {
private override init(@noescape resolvers: (fulfill: (T) -> Void, reject: (ErrorType) -> Void) throws -> Void) {
super.init(resolvers: resolvers)
super.init(resolvers: resolvers)
}
}
}
}