statement - uiswitch swift



Coincidencia de patrones como expresión funcional en swift (1)

Swift es un lenguaje bastante funcional y los lenguajes funcionales se refieren a expresiones y no a declaraciones, por lo que la combinación de patrones de conmutación me desconcierta.

Todos los ejemplos son algo como esto:

switch x {
case > 0:
    print("positive")
case < 0:
    print("negative")
case 0:
    print("zero")
}

Pero quiero hacer algo como esto:

let result = switch x {
case > 0:
    "positive"
case < 0:
    "negative"
case 0:
    "zero"
}

Actualmente, la única forma en que puedo verlo es:

var result: String?

switch x {
case > 0:
    result = "positive"
case < 0:
    result = "negative"
case 0:
    result = "zero"
}

if let s = result {
    //...
}

Que obviamente no es tan elegante como la declaración de cambio basada en 'expresión'. ¿Hay alternativas o alternativas, o es algo que Apple debe hacer para mejorar el lenguaje?


La sentencia Switch no se puede usar directamente como una expresión en Swift. Pero, hay una solución para hacer lo que quieras. Es posible escribir la declaración del interruptor dentro de un cierre como este:

let result : String = {
    switch x {
    case _ where x > 0:
        return "positive"
    case _ where x < 0:
        return "negative"
    default:
        return "zero"
    }
}()




expression