Skip to content

Commit 9821826

Browse files
committed
Fix an issue where binding closure could be executed after disposing
1 parent 224225f commit 9821826

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

Sources/Bindable.swift

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,9 @@ extension SignalProtocol where Error == Never {
104104
/// - Returns: A disposable that can cancel the binding.
105105
@discardableResult
106106
public func bind<Target: Deallocatable>(to target: Target, context: ExecutionContext, setter: @escaping (Target, Element) -> Void) -> Disposable {
107-
return prefix(untilOutputFrom: target.deallocated).observeNext { [weak target] element in
108-
context.execute {
109-
if let target = target {
110-
setter(target, element)
111-
}
107+
return prefix(untilOutputFrom: target.deallocated).receive(on: context).observeNext { [weak target] element in
108+
if let target = target {
109+
setter(target, element)
112110
}
113111
}
114112
}
@@ -188,11 +186,9 @@ extension SignalProtocol where Error == Never, Element == Void {
188186
/// - Returns: A disposable that can cancel the binding.
189187
@discardableResult
190188
public func bind<Target: Deallocatable>(to target: Target, context: ExecutionContext, setter: @escaping (Target) -> Void) -> Disposable {
191-
return prefix(untilOutputFrom: target.deallocated).observeNext { [weak target] _ in
192-
context.execute {
193-
if let target = target {
194-
setter(target)
195-
}
189+
return prefix(untilOutputFrom: target.deallocated).receive(on: context).observeNext { [weak target] _ in
190+
if let target = target {
191+
setter(target)
196192
}
197193
}
198194
}

0 commit comments

Comments
 (0)