diff --git a/CombineExt.xcodeproj/project.pbxproj b/CombineExt.xcodeproj/project.pbxproj index ace2f32..8951eb3 100644 --- a/CombineExt.xcodeproj/project.pbxproj +++ b/CombineExt.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 63FEBC9527E9FE9000E934AD /* FlatMapFirstTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63FEBC9427E9FE9000E934AD /* FlatMapFirstTests.swift */; }; 712E36C82711B79000A2AAFE /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712E36C72711B79000A2AAFE /* RetryWhen.swift */; }; 7182326F26DAAF230026BAD3 /* RetryWhenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7182326E26DAAF230026BAD3 /* RetryWhenTests.swift */; }; + 86569294292B342A0027D795 /* Publisher+OptionalSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86569293292B342A0027D795 /* Publisher+OptionalSink.swift */; }; BF330EF924F20032001281FC /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF330EF824F20032001281FC /* Timer.swift */; }; BF330EFB24F20080001281FC /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF330EFA24F20080001281FC /* Lock.swift */; }; BF3D3B5D253B83F300D830ED /* IgnoreFailure.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3D3B5C253B83F300D830ED /* IgnoreFailure.swift */; }; @@ -124,6 +125,7 @@ 63FEBC9427E9FE9000E934AD /* FlatMapFirstTests.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = FlatMapFirstTests.swift; sourceTree = ""; }; 712E36C72711B79000A2AAFE /* RetryWhen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetryWhen.swift; sourceTree = ""; }; 7182326E26DAAF230026BAD3 /* RetryWhenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryWhenTests.swift; sourceTree = ""; }; + 86569293292B342A0027D795 /* Publisher+OptionalSink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Publisher+OptionalSink.swift"; sourceTree = ""; }; BF330EF824F20032001281FC /* Timer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; }; BF330EFA24F20080001281FC /* Lock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = ""; }; BF3D3B5C253B83F300D830ED /* IgnoreFailure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IgnoreFailure.swift; sourceTree = ""; }; @@ -243,6 +245,7 @@ isa = PBXGroup; children = ( OBJ_12 /* Optional.swift */, + 86569293292B342A0027D795 /* Publisher+OptionalSink.swift */, ); path = Convenience; sourceTree = ""; @@ -646,6 +649,7 @@ OBJ_94 /* PrefixDuration.swift in Sources */, 63FEBC9327E9FCDB00E934AD /* FlatMapFirst.swift in Sources */, OBJ_95 /* RemoveAllDuplicates.swift in Sources */, + 86569294292B342A0027D795 /* Publisher+OptionalSink.swift in Sources */, OBJ_96 /* SetOutputType.swift in Sources */, OBJ_97 /* ShareReplay.swift in Sources */, BF45214E259C0C610065E60E /* PrefixWhileBehavior.swift in Sources */, diff --git a/Sources/Convenience/Publisher+OptionalSink.swift b/Sources/Convenience/Publisher+OptionalSink.swift new file mode 100644 index 0000000..64ca25f --- /dev/null +++ b/Sources/Convenience/Publisher+OptionalSink.swift @@ -0,0 +1,20 @@ +// +// Publisher+OptionalSink.swift +// CombineExt +// +// Created by reiley kim on 2022/11/21. +// + +import Foundation +import Combine + +@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +public extension Publisher { + func sink(receiveCompletion: ((Subscribers.Completion) -> Void)? = nil, + receiveValue: ((Self.Output) -> Void)? = nil) -> AnyCancellable { + let receiveValueClosure: ((Self.Output) -> Void) = receiveValue ?? { _ in } + let receiveComletionClosure: ((Subscribers.Completion) -> Void) = receiveCompletion ?? { _ in } + + return sink(receiveCompletion: receiveComletionClosure, receiveValue: receiveValueClosure) + } +}