Skip to content

Commit 49eae18

Browse files
committed
Merge pull request #33 from ReactKit/feature/canceller
Update SwiftTask to v3.1.0 & add Canceller feature.
2 parents 5fbeb5b + 360b6b7 commit 49eae18

File tree

5 files changed

+143
-60
lines changed

5 files changed

+143
-60
lines changed

Cartfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
github "ReactKit/SwiftTask" ~> 3.0.0
1+
github "ReactKit/SwiftTask" ~> 3.1.0

Cartfile.resolved

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
github "duemunk/Async" "2f0c5b69e3ff0e41c9391016b7855cd319000515"
2-
github "ReactKit/SwiftTask" "3.0.0"
2+
github "ReactKit/SwiftTask" "3.1.0"

ReactKit/Foundation/KVO.swift

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
import Foundation
10+
import SwiftTask
1011

1112
// NSNull-to-nil converter for KVO which returns NSNull when nil is set
1213
// https://github.com/ReactKit/ReactKit/pull/18
@@ -200,24 +201,29 @@ extension NSKeyValueChange: Printable
200201
infix operator <~ { associativity right }
201202

202203
/// Key-Value Binding
203-
/// e.g. (obj2, "value") <~ stream
204-
public func <~ <T: AnyObject>(tuple: (object: NSObject, keyPath: String), stream: Stream<T?>)
204+
/// e.g. `(obj2, "value") <~ stream`
205+
public func <~ <T: AnyObject>(tuple: (object: NSObject, keyPath: String), stream: Stream<T?>) -> Canceller?
205206
{
206207
weak var object = tuple.object
207208
let keyPath = tuple.keyPath
209+
var canceller: Canceller? = nil
208210

209-
stream.react { value in
211+
stream.react(&canceller) { value in
210212
if let object = object {
211213
object.setValue(value, forKeyPath:keyPath) // NOTE: don't use `tuple` inside closure, or object will be captured
212214
}
213215
}
216+
217+
return canceller
214218
}
215219

216220
/// Multiple Key-Value Binding
217-
/// e.g. [ (obj1, "value1"), (obj2, "value2") ] <~ stream (sending [value1, value2] array)
218-
public func <~ <T: AnyObject>(tuples: [(object: NSObject, keyPath: String)], stream: Stream<[T?]>)
221+
/// e.g. `[ (obj1, "value1"), (obj2, "value2") ] <~ stream` (sending [value1, value2] array)
222+
public func <~ <T: AnyObject>(tuples: [(object: NSObject, keyPath: String)], stream: Stream<[T?]>) -> Canceller?
219223
{
220-
stream.react { (values: [T?]) in
224+
var canceller: Canceller? = nil
225+
226+
stream.react(&canceller) { (values: [T?]) in
221227
for i in 0..<tuples.count {
222228
if i >= values.count { break }
223229

@@ -227,6 +233,8 @@ public func <~ <T: AnyObject>(tuples: [(object: NSObject, keyPath: String)], str
227233
tuple.object.setValue(value, forKeyPath:tuple.keyPath)
228234
}
229235
}
236+
237+
return canceller
230238
}
231239

232240
/// short-living Key-Value Binding

0 commit comments

Comments
 (0)