-
-
Save fitomad/3a717ff51065fb96ded05fc74891cd2c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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