Skip to content

Instantly share code, notes, and snippets.

private class ObservableModel<Observed>: ObservableObject {
@Published var observed: Observed?
init(publisher: AnyPublisher<Observed, Never>) {
publisher
.compactMap { $0 }
.receive(on: DispatchQueue.main)
.assign(to: &$observed)
}
}
func asPublisher<T>(_ flow: CFlow<T>) -> AnyPublisher<T, Never> {
return Deferred<Publishers.HandleEvents<PassthroughSubject<T, Never>>> {
let subject = PassthroughSubject<T, Never>()
let closable = flow.watch { next in
if let next = next {
subject.send(next)
}
}
return subject.handleEvents(receiveCancel: {
closable.close()
data class Restaurant(val id: Int, val name: String, val priceCategory: String)
data class Reservation(val id: Int, val date: Long, val numberOfGuests: Int)
sealed class Response<T> {
class Loading<T>: Response<T>()
class Failed<T>: Response<T>()
data class Success<T>(val data: T): Response<T>()
}
interface Api {
data class Restaurant(val id: Int, val name: String, val priceCategory: String)
data class Reservation(val id: Int, val date: Long, val numberOfGuests: Int)
sealed class Response<T> {
class Loading<T>: Response<T>()
class Failed<T>: Response<T>()
data class Success<T>(val data: T): Response<T>()
}
interface Api {
@lammertw
lammertw / Filter.swift
Created June 17, 2016 15:33
Filter objects into Optionals
extension Filter {
/// Allows filtering of non sequence types.
///
/// let label = UILabel().then {
/// $0.textAlignment = .Center
/// $0.textColor = UIColor.blackColor()
/// $0.text = "Hello, World!"
/// }
public func filter(@noescape condition: Self -> Bool) -> Self? {
@lammertw
lammertw / Digits+Promise.swift
Last active May 31, 2016 09:59
PromiseKit extension on Digits by Fabric.io
import Foundation
import DigitsKit
import PromiseKit
extension Digits {
public func authenticateWithCompletion() -> Promise<DGTSession> {
return Promise(resolver: authenticateWithCompletion)
}
@lammertw
lammertw / OSCheck.swift
Created November 13, 2015 06:59
Swift Operating System version check
extension Double {
var operatingSystemIsSameOrHigher: Bool {
let major = Int(self)
let minor = Int(round((self - Double(major)) * 10))
let version = NSOperatingSystemVersion(majorVersion: major, minorVersion: minor, patchVersion: 0)
return NSProcessInfo().isOperatingSystemAtLeastVersion(version)
}
var operatingSystemIsLower: Bool {