-
-
Save fitomad/2c1ae87d9e57c46e9c0f14ae1e1782c2 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
// Definimos nuestro error personaliado | |
public enum OperationError: Error | |
{ | |
case serverNotAvailable | |
case databaseNotAvailable | |
case sparkClusterNotAvailable | |
} | |
// Creo un alías para el closure que devuelvo en la función. | |
public typealias ServerOperationCompletionHandler = (Result<Bool, OperationError>) -> (Void) | |
/** | |
Función *fake* que invoca un worker de Spark. | |
Dependiendo de lo que pasameos como parámetro generamos una respuesta u otra. | |
- Parameters: | |
- workerName: Nombre del worker que invocamos. Es el que definine el resultado de la operación | |
- handle: Devolvemos el resultado de la operación. Contiene el nuevo tipo `Result` | |
*/ | |
public func startWorker(_ workerName: String, completionHandler handler: @escaping ServerOperationCompletionHandler) -> Void | |
{ | |
if workerName == "TwitterApp" | |
{ | |
handler(.failure(.sparkClusterNotAvailable)) | |
} | |
else if workerName == "FacebookApp" | |
{ | |
handler(.failure(.databaseNotAvailable)) | |
} | |
else if workerName == "InstagramApp" | |
{ | |
handler(.failure(.serverNotAvailable)) | |
} | |
else if workerName == "Snapchat" | |
{ | |
handler(.success(false)) | |
} | |
else | |
{ | |
handler(.success(true)) | |
} | |
} | |
// Llamamos a nuestra función de forma asíncrona... | |
startWorker("OkApp") { (result: Result<Bool, OperationError>) -> Void in | |
// Veamos como ha ido la operación | |
switch result | |
{ | |
case .success(let isWorkerOnline): | |
if isWorkerOnline | |
{ | |
print("Proceso corriendo en Spark") | |
} | |
else | |
{ | |
print("Proceso en estado Waiting...") | |
} | |
case .failure(let reason): | |
switch reason | |
{ | |
case .serverNotAvailable: | |
print("El servidor no se encuentra disponible en estos momentos.") | |
case .databaseNotAvailable: | |
print("La base de datos no está en línea.") | |
case .sparkClusterNotAvailable: | |
print("El cluster de Spark no está levantado") | |
@unknown default: | |
print("Algo está pasando...") | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment