Skip to content

Commit f79ed3c

Browse files
committed
Merge pull request ReactiveX#75 from shuoli84/master
Pull Request: Fix crash on iphone 5s ios7.1 simulater
2 parents d9c854f + 549590c commit f79ed3c

File tree

8 files changed

+143
-147
lines changed

8 files changed

+143
-147
lines changed

RxSwift/RxSwift/Disposables/CompositeDisposable.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
6060
public func addDisposable(disposable: Disposable) -> DisposeKey? {
6161
// this should be let
6262
// bucause of compiler bug it's var
63-
let key = self.lock.calculateLocked { oldState -> DisposeKey? in
63+
let key = self.lock.calculateLocked { () -> DisposeKey? in
6464
return disposables?.value.put(disposable)
6565
}
6666

@@ -90,7 +90,7 @@ public class CompositeDisposable : DisposeBase, Disposable, Cancelable {
9090
}
9191

9292
public func dispose() {
93-
let oldDisposables = self.lock.calculateLocked { Void -> [Disposable]? in
93+
let oldDisposables = self.lock.calculateLocked { () -> [Disposable]? in
9494
let allDisposables = disposables?.value.all
9595
self.disposables = nil
9696

RxSwift/RxSwift/Disposables/SingleAssignmentDisposable.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,32 +40,31 @@ public class SingleAssignmentDisposable : DisposeBase, Disposable, Cancelable {
4040
return self.state.disposable ?? NopDisposable.instance
4141
}
4242
}
43-
set(newDisposable) {
44-
var disposable: Disposable? = lock.calculateLocked { oldState in
45-
43+
set {
44+
var disposable: Disposable? = lock.calculateLocked {
4645
if state.disposableSet {
4746
rxFatalError("oldState.disposable != nil")
4847
}
4948

5049
state.disposableSet = true
5150

5251
if state.disposed {
53-
return newDisposable
52+
return newValue
5453
}
5554

56-
state.disposable = newDisposable
55+
state.disposable = newValue
5756

5857
return nil
5958
}
6059

6160
if let disposable = disposable {
62-
return disposable.dispose()
61+
disposable.dispose()
6362
}
6463
}
6564
}
6665

6766
public func dispose() {
68-
var disposable: Disposable? = lock.calculateLocked { old in
67+
var disposable: Disposable? = lock.calculateLocked {
6968
state.disposed = true
7069
var dispose = state.disposable
7170
state.disposable = nil

RxSwift/RxSwift/Observables/Implementations/CombineLatest+arity.swift

Lines changed: 118 additions & 117 deletions
Large diffs are not rendered by default.

RxSwift/RxSwift/Observables/Implementations/CombineLatest+arity.tt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class CombineLatestSink<%= i %>_<<%= ", ".join(map(1...i) { "E\($0)" }) %>, O: O
3737
let parent: Parent
3838

3939
<%= "\n".join(map(1...i) {
40-
" var latestElement\($0): E\($0)! = nil"
40+
" var latestElement\($0): RxMutableBox<E\($0)!> = RxMutableBox(nil)"
4141
}) %>
4242

4343
init(parent: Parent, observer: O, cancel: Disposable) {
@@ -51,7 +51,7 @@ class CombineLatestSink<%= i %>_<<%= ", ".join(map(1...i) { "E\($0)" }) %>, O: O
5151
}) %>
5252

5353
<%= "\n".join(map(1...i) {
54-
" let observer\($0) = CombineLatestObserver(lock: lock, parent: self, index: \($0 - 1), setLatestValue: { (e: E\($0)) -> Void in self.latestElement\($0) = e }, this: subscription\($0))"
54+
" let observer\($0) = CombineLatestObserver(lock: lock, parent: self, index: \($0 - 1), setLatestValue: { (e: E\($0)) -> Void in self.latestElement\($0).value = e }, this: subscription\($0))"
5555
}) %>
5656

5757
<%= "\n".join(map(1...i) {
@@ -64,7 +64,7 @@ class CombineLatestSink<%= i %>_<<%= ", ".join(map(1...i) { "E\($0)" }) %>, O: O
6464
}
6565

6666
override func getResult() -> RxResult<R> {
67-
return self.parent.resultSelector(<%= ", ".join(map(1...i) { "latestElement\($0)" }) %>)
67+
return self.parent.resultSelector(<%= ", ".join(map(1...i) { "latestElement\($0).value" }) %>)
6868
}
6969
}
7070

@@ -92,4 +92,4 @@ class CombineLatest<%= i %><<%= ", ".join(map(1...i) { "E\($0)" }) %>, R> : Prod
9292
}
9393
}
9494

95-
<% } %>
95+
<% } %>

RxSwift/RxSwift/Observables/Implementations/CombineLatest.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ protocol CombineLatestProtocol : class {
1616

1717
class CombineLatestSink<O: ObserverType> : Sink<O>, CombineLatestProtocol {
1818
typealias Element = O.Element
19-
19+
2020
var lock = NSRecursiveLock()
2121

2222
var hasValueAll: Bool
2323
var hasValue: [Bool]
2424
var isDone: [Bool]
25-
25+
2626
init(arity: Int, observer: O, cancel: Disposable) {
2727
self.hasValueAll = false
2828
self.hasValue = [Bool](count: arity, repeatedValue: false)
@@ -31,13 +31,9 @@ class CombineLatestSink<O: ObserverType> : Sink<O>, CombineLatestProtocol {
3131
super.init(observer: observer, cancel: cancel)
3232
}
3333

34-
func getResult() -> RxResult<Element> {
34+
/* abstract */ func getResult() -> RxResult<Element> {
3535
return abstractMethod()
3636
}
37-
38-
func performLocked(@noescape action: () -> Void) {
39-
return lock.calculateLocked(action)
40-
}
4137

4238
func next(index: Int) {
4339
if !hasValueAll {

RxSwift/RxSwift/Observables/Implementations/ConnectableObservable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class ConnectableObservable<SourceType, ResultType> : ConnectableObservableType<
4646
}
4747

4848
override func connect() -> Disposable {
49-
let (connection, connect) = self.lock.calculateLocked { oldConnection -> (Connection<SourceType, ResultType>, Bool) in
49+
let (connection, connect) = self.lock.calculateLocked { () -> (Connection<SourceType, ResultType>, Bool) in
5050
if let connection = self.connection {
5151
return (connection, false)
5252
}

RxSwift/RxSwift/Observables/Implementations/Switch.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class SwitchIter<O: ObserverType> : ObserverType {
9494
}
9595

9696
func on(event: Event<Element>) {
97-
return parent.lock.calculateLocked { state in
97+
return parent.lock.calculateLocked {
9898
let switchState = self.parent.switchState
9999

100100
switch event {

RxSwift/RxSwift/Observables/Implementations/Throttle.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Throttle_<O: ObserverType, SchedulerType: Scheduler> : Sink<O>, ObserverTy
1313
typealias ParentType = Throttle<Element, SchedulerType>
1414

1515
typealias ThrottleState = (
16-
value: Element?,
16+
value: RxMutableBox<Element?>,
1717
cancellable: SerialDisposable,
1818
id: UInt64
1919
)
@@ -22,7 +22,7 @@ class Throttle_<O: ObserverType, SchedulerType: Scheduler> : Sink<O>, ObserverTy
2222

2323
var lock = NSRecursiveLock()
2424
var throttleState: ThrottleState = (
25-
value: nil,
25+
value: RxMutableBox(nil),
2626
cancellable: SerialDisposable(),
2727
id: 0
2828
)
@@ -53,19 +53,19 @@ class Throttle_<O: ObserverType, SchedulerType: Scheduler> : Sink<O>, ObserverTy
5353
var latestId = self.lock.calculateLocked { () -> UInt64 in
5454
let observer = self.observer
5555

56-
var oldValue = self.throttleState.value
56+
var oldValue = self.throttleState.value.value
5757

5858
self.throttleState.id = self.throttleState.id &+ 1
5959

6060
switch event {
6161
case .Next(let boxedValue):
62-
self.throttleState.value = boxedValue.value
62+
self.throttleState.value.value = boxedValue.value
6363
case .Error(let error):
64-
self.throttleState.value = nil
64+
self.throttleState.value.value = nil
6565
trySend(observer, event)
6666
self.dispose()
6767
case .Completed:
68-
self.throttleState.value = nil
68+
self.throttleState.value.value = nil
6969
if let value = oldValue {
7070
trySendNext(observer, value)
7171
}
@@ -104,8 +104,8 @@ class Throttle_<O: ObserverType, SchedulerType: Scheduler> : Sink<O>, ObserverTy
104104

105105
func propagate() {
106106
var originalValue: Element? = self.lock.calculateLocked {
107-
var originalValue = self.throttleState.value
108-
self.throttleState.value = nil
107+
var originalValue = self.throttleState.value.value
108+
self.throttleState.value.value = nil
109109
return originalValue
110110
}
111111

0 commit comments

Comments
 (0)