Skip to content

Instantly share code, notes, and snippets.

View fmo91's full-sized avatar

Fernando Martín Ortiz fmo91

View GitHub Profile
@fmo91
fmo91 / AnyCancellable+add.swift
Created November 4, 2019 03:46
A handy extension to make AnyCancellable array more similar to RxSwift's DisposeBag.
import Combine
extension AnyCancellable {
func add(to cancellables: inout [AnyCancellable]) {
cancellables.append(self)
}
}
final class ViewModel {
// 1.
@Published var operation: MathOperation?
@Published var operationText: String?
@Published var firstNumberText: String?
@Published var secondNumberText: String?
@Published var result: String?
@Published private var firstNumber: Int?
@Published private var secondNumber: Int?
final class ViewController: UIViewController {
// ...
// MARK: - Helper methods -
private func calculateResult() {
guard let firstNumber = Int(firstNumberTextField.text ?? "")
, let secondNumber = Int(secondNumberTextField.text ?? "")
, let selectedOperation = self.selectedOperation
else {
return
final class ViewController: UIViewController {
// ...
// MARK: - Life Cycle -
override func viewDidLoad() {
super.viewDidLoad()
firstNumberTextField.addTarget(self,
action: #selector(firstNumberTextFieldChanged),
for: .editingChanged
final class ViewController: UIViewController
// MARK: - Views -
@IBOutlet private weak var firstNumberTextField: UITextField!
@IBOutlet private weak var secondNumberTextField: UITextField!
@IBOutlet private weak var operationTextField: UITextField!
@IBOutlet private weak var resultLabel: UILabel!
// ...
}
@fmo91
fmo91 / Dependencies.swift
Last active November 1, 2019 12:59
Simple Dependency Injection using @propertyWrapper
import UIKit
enum Dependencies {
struct Name {
let rawValue: String
static let `default` = Name(rawValue: "__default__")
}
final class Container {
private var dependencies: [(key: Dependencies.Name, value: Any)] = []
@fmo91
fmo91 / FirestoreObservableCollection.swift
Created October 22, 2019 04:30
SwiftUI wrapper on Firestore. Proof of concept. A video showcasing this is here: https://youtu.be/Q0jAJZEdoy8
//
// ContentView.swift
// FirestoreTest
//
// Created by MAC on 21/10/2019.
// Copyright © 2019 MAC. All rights reserved.
//
import SwiftUI
import Combine
@fmo91
fmo91 / UnidirectionalCore.swift
Last active May 20, 2019 08:09
Minimal Unidirectional Architecture Core Types with support for asynchronous actions, partial state listeners and middlewares
//
// UnidirectionalCore.swift
// UnidirectionalCore
//
// Created by Fernando Ortiz on 05/05/2019.
// Copyright © 2019 Fernando Ortiz. All rights reserved.
//
import Foundation
GetAllUsers().execute(
onSuccess: { (users: [User]) in
// Do something with the users. They are already typed!
},
onError: { (error: Error) in
// Do something with the error.
}
)
public extension RequestType {
public func execute (
dispatcher: NetworkDispatcher = URLSessionNetworkDispatcher.instance,
onSuccess: @escaping (ResponseType) -> Void,
onError: @escaping (Error) -> Void
) {
dispatcher.dispatch(
request: self.data,
onSuccess: { (responseData: Data) in
do {