CXFoundation(中文)
Combine + Foundation, built on top of CombineX.
DispatchQueueJSONDecoderJSONEncoderNotificationCenterOperationQueuePropertyListDecoderPropertylistEncoderRunLoopTimerURLSession
Notice
This library is still in beta, so do not use it in production!
Living examples
Timer
let ping = Timer.cx.publish(every: 1, on: RunLoop.main, in: .default)
.sink { d in
// ping
}URLSession
let request = URLSession.shared.cx.dataTaskPublisher(for: host)
.sink { (data, response) in
// update ui
}NotificationCenter
let observe = NotificationCenter.default.cx.publisher(for: name)
.sink { notification in
//
}Scheduler
let cancel = upstream
.receive(on: RunLoop.main.cx.scheduler)
.sink { v in
//
}Install
Swift Package Manager
dependencies.append(
.package(url: "https://github.com/cx-org/CXFoundation", .branch("master"))
)CocoaPods
pod 'CxFoundation', :git => 'https://github.com/cx-org/CXFoundation.git', :branch => 'master'Carthage
github "cx-org/CXFoundation" "master"
Related
FAQ
Why not use Combine directly?
See here.
Why are the interfaces not exactly the same as Combine?
Combine directly extends the system type. We can't define the same interface in the same place - it won't compile. Such as:
extension URLSession {
struct DataTaskPublisher: Publisher {
// ...
}
}If the interfaces are inconsistent, will migration be very troublesome?
CXCompatible provides implementations of all cx interfaces, but based on Combine, no CombineX dependency. It can help you migrate painlessly.