Instantly share code, notes, and snippets.

@fitomad fitomad/swift5_SE-0235_1.swift Secret
Created Jan 21, 2019

Embed
What would you like to do?
// 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