Skip to content

Instantly share code, notes, and snippets.

@fitomad
Last active February 7, 2020 09:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fitomad/3a717ff51065fb96ded05fc74891cd2c to your computer and use it in GitHub Desktop.
Save fitomad/3a717ff51065fb96ded05fc74891cd2c to your computer and use it in GitHub Desktop.
//
// Ejemplo de uso de `callAsFunction`
//
// @fitomad - 2020
//
import Foundation
public struct Contador
{
/// Valor del contador
public private(set) var cantidad: Int
/**
Creamos un contador con un valor inicial
- Parameter valorInicial: El valor con el que arranaca el contador
*/
public init(valorInicial: Int)
{
self.cantidad = valorInicial
}
// MARK: - Implementaciones de `callAsFunction` -
/**
Puede no recibiar parámetros y devolver un valor
*/
public func callAsFunction() -> Int
{
return self.cantidad
}
/**
O recibir un valor y no devolver nada
*/
public mutating func callAsFunction(_ cantidad: Int) -> Void
{
self.cantidad += cantidad
}
/**
También podemos usarlo con un *trailing closure*
*/
public mutating func callAsFunction(_ cantidad: Int, handler: (Int) -> Void) -> Void
{
self.cantidad += cantidad
handler(self.cantidad)
}
}
//
// TEST
//
var contador = Contador(valorInicial: 0)
contador(2) // Ahora la propiedad `cantidad` vale `2`
print("Contador: \(contador.cantidad)")
contador(10) // `cantidad` vale `12`
print("Contador: \(contador())")
contador(32) { nuevoValor in
// Ahora vale 44
print("Contador: \(nuevoValor)")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment