Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tailec/CombineExamples

Getting started with Apple Combine
https://github.com/tailec/CombineExamples

combine reactive reactive-programming swift

Last synced: about 1 month ago
JSON representation

Getting started with Apple Combine

Awesome Lists containing this project

README

        

CombineExamples

WIP


👷 🧱 🧰 🛠️


Getting started with Combine


A collection of simple examples using Apple Combine reactive framework


last commit

open issues

swift version

platform

license


Built with ❤︎ by
Pawel Krawiec





## Examples


LOGIN SCREEN


Simple user login validation

```swift
let credentials = Publishers
.CombineLatest($username, $password) { ($0, $1) }
.share()
credentials
.map { uname, pass in
uname.count >= 4 && pass.count >= 4
}
.prepend(false) // initial state
.assign(to: \.isEnabled, on: loginButton)
.cancelled(by: cancellableBag)
// More in the example...
```



TIMER


Simplified stopwatch

```swift
Timer.publish(every: 0.1, on: .main, in: .default)
.autoconnect()
.scan(0, { (acc, _ ) in return acc + 1 })
.map { $0.timeInterval }
.replaceError(with: "")
.eraseToAnyPublisher()
.assign(to: \.currentTime, on: self)
.cancelled(by: cancellableBag)
// More in the example...
```



SEARCH


Browsing GitHub repositories

```swift
$query
.throttle(for: 0.5,
scheduler: .main,
latest: true)
.removeDuplicates()
.map { query in
return API().search(with: query)
.retry(3)
.eraseToAnyPublisher()
}
// More in the example...
```



AVAILABILITY


Check if your repository name is already taken

```swift
$text
.throttle(for: 0.5, scheduler: .main, latest: true)
.map { text in
API().search(with: text)
.map { isAvailable in
isAvailable ? "Name available" : "Name already taken"
}
.prepend("Checking...")
}
.switchToLatest()
// More in the example...
```


Stay tuned. More examples coming.

## Licence
MIT.

The Apple logo and the Combine framework are property of Apple Inc.