Skip to content

Commit 6a0a681

Browse files
committed
Convert Combine publishers to producer via producer(). A few utilities.
1 parent d718b17 commit 6a0a681

File tree

5 files changed

+88
-10
lines changed

5 files changed

+88
-10
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ PlaygroundUtility.remap
2323
# SwiftPM
2424
.build
2525
Packages
26+
.swiftpm
2627

2728
# Carthage
2829
Carthage/Build

ReactiveSwift.xcodeproj/project.pbxproj

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,18 @@
6666
9A1D067D1D948A2300ACF44C /* UnidirectionalBindingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1D067C1D948A2200ACF44C /* UnidirectionalBindingSpec.swift */; };
6767
9A1D067E1D948A2300ACF44C /* UnidirectionalBindingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1D067C1D948A2200ACF44C /* UnidirectionalBindingSpec.swift */; };
6868
9A1D067F1D948A2300ACF44C /* UnidirectionalBindingSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1D067C1D948A2200ACF44C /* UnidirectionalBindingSpec.swift */; };
69-
9A5865DF244CEF9800AADB58 /* CombineInteroperability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */; };
70-
9A5865E0244CEF9800AADB58 /* CombineInteroperability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */; };
71-
9A5865E1244CEF9800AADB58 /* CombineInteroperability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */; };
72-
9A5865E2244CEF9800AADB58 /* CombineInteroperability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */; };
69+
9A5865DF244CEF9800AADB58 /* ToCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* ToCombine.swift */; };
70+
9A5865E0244CEF9800AADB58 /* ToCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* ToCombine.swift */; };
71+
9A5865E1244CEF9800AADB58 /* ToCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* ToCombine.swift */; };
72+
9A5865E2244CEF9800AADB58 /* ToCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865DE244CEF9800AADB58 /* ToCombine.swift */; };
73+
9A5865E5244CFD4900AADB58 /* FromCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E4244CFD4900AADB58 /* FromCombine.swift */; };
74+
9A5865E6244CFD4900AADB58 /* FromCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E4244CFD4900AADB58 /* FromCombine.swift */; };
75+
9A5865E7244CFD4900AADB58 /* FromCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E4244CFD4900AADB58 /* FromCombine.swift */; };
76+
9A5865E8244CFD4900AADB58 /* FromCombine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E4244CFD4900AADB58 /* FromCombine.swift */; };
77+
9A5865EA244CFE9000AADB58 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E9244CFE9000AADB58 /* Utilities.swift */; };
78+
9A5865EB244CFE9000AADB58 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E9244CFE9000AADB58 /* Utilities.swift */; };
79+
9A5865EC244CFE9000AADB58 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E9244CFE9000AADB58 /* Utilities.swift */; };
80+
9A5865ED244CFE9000AADB58 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A5865E9244CFE9000AADB58 /* Utilities.swift */; };
7381
9A67963B1F6056B90058C5B4 /* UninhabitedTypeGuards.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A67963A1F6056B90058C5B4 /* UninhabitedTypeGuards.swift */; };
7482
9A67963C1F6059420058C5B4 /* UninhabitedTypeGuards.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A67963A1F6056B90058C5B4 /* UninhabitedTypeGuards.swift */; };
7583
9A67963D1F6059430058C5B4 /* UninhabitedTypeGuards.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A67963A1F6056B90058C5B4 /* UninhabitedTypeGuards.swift */; };
@@ -244,7 +252,9 @@
244252
9A1A4F981E16961C006F3039 /* ValidatingPropertySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidatingPropertySpec.swift; sourceTree = "<group>"; };
245253
9A1B824020835EEC00EB7C09 /* ResultExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultExtensions.swift; sourceTree = "<group>"; };
246254
9A1D067C1D948A2200ACF44C /* UnidirectionalBindingSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnidirectionalBindingSpec.swift; sourceTree = "<group>"; };
247-
9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombineInteroperability.swift; sourceTree = "<group>"; };
255+
9A5865DE244CEF9800AADB58 /* ToCombine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToCombine.swift; sourceTree = "<group>"; };
256+
9A5865E4244CFD4900AADB58 /* FromCombine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FromCombine.swift; sourceTree = "<group>"; };
257+
9A5865E9244CFE9000AADB58 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = "<group>"; };
248258
9A67963A1F6056B90058C5B4 /* UninhabitedTypeGuards.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UninhabitedTypeGuards.swift; sourceTree = "<group>"; };
249259
9A681A9D1E5A241B00B097CF /* DeprecationSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeprecationSpec.swift; sourceTree = "<group>"; };
250260
9A9100DE1E0E6E620093E346 /* ValidatingProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidatingProperty.swift; sourceTree = "<group>"; };
@@ -385,6 +395,16 @@
385395
path = tvOS;
386396
sourceTree = "<group>";
387397
};
398+
9A5865E3244CFD2A00AADB58 /* CombineInteroperability */ = {
399+
isa = PBXGroup;
400+
children = (
401+
9A5865DE244CEF9800AADB58 /* ToCombine.swift */,
402+
9A5865E4244CFD4900AADB58 /* FromCombine.swift */,
403+
9A5865E9244CFE9000AADB58 /* Utilities.swift */,
404+
);
405+
path = CombineInteroperability;
406+
sourceTree = "<group>";
407+
};
388408
A97451321B3A935E00F48E55 /* watchOS */ = {
389409
isa = PBXGroup;
390410
children = (
@@ -459,7 +479,7 @@
459479
9A090C131DA0309E00EE97CA /* Reactive.swift */,
460480
D0C312C819EF2A5800984962 /* Scheduler.swift */,
461481
C79B647B1CD52E23003F2376 /* EventLogger.swift */,
462-
9A5865DE244CEF9800AADB58 /* CombineInteroperability.swift */,
482+
9A5865E3244CFD2A00AADB58 /* CombineInteroperability */,
463483
D03B4A3919F4C25F009E02AC /* Signals */,
464484
D03B4A3B19F4C281009E02AC /* Extensions */,
465485
9ABCB1841D2A5B5A00BCA243 /* Deprecations+Removals.swift */,
@@ -875,7 +895,8 @@
875895
57A4D1B61BA13D7A00F7D4B1 /* Event.swift in Sources */,
876896
57A4D1B81BA13D7A00F7D4B1 /* Scheduler.swift in Sources */,
877897
9A9100E21E0E6E680093E346 /* ValidatingProperty.swift in Sources */,
878-
9A5865E2244CEF9800AADB58 /* CombineInteroperability.swift in Sources */,
898+
9A5865E2244CEF9800AADB58 /* ToCombine.swift in Sources */,
899+
9A5865ED244CFE9000AADB58 /* Utilities.swift in Sources */,
879900
57A4D1B91BA13D7A00F7D4B1 /* Action.swift in Sources */,
880901
57A4D1BA1BA13D7A00F7D4B1 /* Property.swift in Sources */,
881902
9A090C171DA0309E00EE97CA /* Reactive.swift in Sources */,
@@ -888,6 +909,7 @@
888909
57A4D1C01BA13D7A00F7D4B1 /* FoundationExtensions.swift in Sources */,
889910
D85C652D1C0E70E5005A77AD /* Flatten.swift in Sources */,
890911
9ABCB1881D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */,
912+
9A5865E8244CFD4900AADB58 /* FromCombine.swift in Sources */,
891913
EBCC7DBF1BBF01E200A2AE92 /* Observer.swift in Sources */,
892914
C79B64801CD52E4E003F2376 /* EventLogger.swift in Sources */,
893915
4A0E11021D2A92720065D310 /* Lifetime.swift in Sources */,
@@ -931,7 +953,8 @@
931953
A9B315BE1B3940810001CB9C /* Event.swift in Sources */,
932954
A9B315C01B3940810001CB9C /* Scheduler.swift in Sources */,
933955
9A9100E11E0E6E680093E346 /* ValidatingProperty.swift in Sources */,
934-
9A5865E1244CEF9800AADB58 /* CombineInteroperability.swift in Sources */,
956+
9A5865E1244CEF9800AADB58 /* ToCombine.swift in Sources */,
957+
9A5865EC244CFE9000AADB58 /* Utilities.swift in Sources */,
935958
A9B315C11B3940810001CB9C /* Action.swift in Sources */,
936959
A9B315C21B3940810001CB9C /* Property.swift in Sources */,
937960
9A090C161DA0309E00EE97CA /* Reactive.swift in Sources */,
@@ -944,6 +967,7 @@
944967
A9B315C81B3940810001CB9C /* FoundationExtensions.swift in Sources */,
945968
D85C652C1C0E70E4005A77AD /* Flatten.swift in Sources */,
946969
9ABCB1871D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */,
970+
9A5865E7244CFD4900AADB58 /* FromCombine.swift in Sources */,
947971
EBCC7DBE1BBF01E200A2AE92 /* Observer.swift in Sources */,
948972
C79B647F1CD52E4D003F2376 /* EventLogger.swift in Sources */,
949973
4A0E11011D2A92720065D310 /* Lifetime.swift in Sources */,
@@ -960,7 +984,8 @@
960984
D0C312D319EF2A5800984962 /* Disposable.swift in Sources */,
961985
9A9100DF1E0E6E620093E346 /* ValidatingProperty.swift in Sources */,
962986
EBCC7DBC1BBF010C00A2AE92 /* Observer.swift in Sources */,
963-
9A5865DF244CEF9800AADB58 /* CombineInteroperability.swift in Sources */,
987+
9A5865DF244CEF9800AADB58 /* ToCombine.swift in Sources */,
988+
9A5865EA244CFE9000AADB58 /* Utilities.swift in Sources */,
964989
D03B4A3D19F4C39A009E02AC /* FoundationExtensions.swift in Sources */,
965990
9A090C141DA0309E00EE97CA /* Reactive.swift in Sources */,
966991
D08C54B31A69A2AE00AD8286 /* Signal.swift in Sources */,
@@ -973,6 +998,7 @@
973998
D0C312CD19EF2A5800984962 /* Atomic.swift in Sources */,
974999
D08C54BA1A69C54300AD8286 /* Property.swift in Sources */,
9751000
D0D11AB91A6AE87700C1F8B1 /* Action.swift in Sources */,
1001+
9A5865E5244CFD4900AADB58 /* FromCombine.swift in Sources */,
9761002
C79B647C1CD52E23003F2376 /* EventLogger.swift in Sources */,
9771003
9ABCB1851D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */,
9781004
D08C54B81A69A9D000AD8286 /* SignalProducer.swift in Sources */,
@@ -1016,7 +1042,8 @@
10161042
D0C312D419EF2A5800984962 /* Disposable.swift in Sources */,
10171043
D08C54B91A69A9D100AD8286 /* SignalProducer.swift in Sources */,
10181044
9A9100E01E0E6E670093E346 /* ValidatingProperty.swift in Sources */,
1019-
9A5865E0244CEF9800AADB58 /* CombineInteroperability.swift in Sources */,
1045+
9A5865E0244CEF9800AADB58 /* ToCombine.swift in Sources */,
1046+
9A5865EB244CFE9000AADB58 /* Utilities.swift in Sources */,
10201047
9ABCB1861D2A5B5A00BCA243 /* Deprecations+Removals.swift in Sources */,
10211048
EBCC7DBD1BBF01E100A2AE92 /* Observer.swift in Sources */,
10221049
9A090C151DA0309E00EE97CA /* Reactive.swift in Sources */,
@@ -1029,6 +1056,7 @@
10291056
D08C54B71A69A3DB00AD8286 /* Event.swift in Sources */,
10301057
C79B647D1CD52E4A003F2376 /* EventLogger.swift in Sources */,
10311058
D0C312CE19EF2A5800984962 /* Atomic.swift in Sources */,
1059+
9A5865E6244CFD4900AADB58 /* FromCombine.swift in Sources */,
10321060
D0C312E819EF2A5800984962 /* Scheduler.swift in Sources */,
10331061
D0C312D019EF2A5800984962 /* Bag.swift in Sources */,
10341062
D0D11ABA1A6AE87700C1F8B1 /* Action.swift in Sources */,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#if canImport(Combine)
2+
import Combine
3+
4+
extension Publisher {
5+
public func producer() -> SignalProducer<Output, Failure> {
6+
return SignalProducer { observer, lifetime in
7+
lifetime += self.sink(
8+
receiveCompletion: { completion in
9+
switch completion {
10+
case let .failure(error):
11+
observer.send(error: error)
12+
case .finished:
13+
observer.sendCompleted()
14+
}
15+
},
16+
receiveValue: observer.send(value:)
17+
)
18+
}
19+
}
20+
}
21+
#endif
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#if canImport(Combine)
2+
import Combine
3+
4+
extension Lifetime {
5+
@discardableResult
6+
public static func += <C: Cancellable>(lhs: Lifetime, rhs: C) -> Disposable? {
7+
lhs.observeEnded(rhs.cancel)
8+
}
9+
}
10+
11+
extension AnyDisposable: Cancellable {
12+
public func cancel() {
13+
dispose()
14+
}
15+
}
16+
17+
extension SerialDisposable: Cancellable {
18+
public func cancel() {
19+
dispose()
20+
}
21+
}
22+
23+
extension CompositeDisposable: Cancellable {
24+
public func cancel() {
25+
dispose()
26+
}
27+
}
28+
#endif

0 commit comments

Comments
 (0)