Al construir un proyecto en Xcode 11.4 beta 3, obtengo este error del compilador Swift en una enumeración:
El caso de enumeración tiene una tupla única como valor asociado, pero aquí hay varios patrones, que implícitamente tuplan los patrones e intentan igualarlos.
Código fuente:
switch result {
case .error(let err):
//
case .value(let staff, let locations): // <-- error on this line
//
}
Result
es una enumeración genérica con valores asociados para .error
y .value
. En este caso, el valor asociado es una tupla.
public enum Result<T> {
case value(T)
case error(Error)
}
No recuerdo haber visto este error antes, y buscarlo no arrojó ningún resultado. ¿Algunas ideas?
Result
, estoy de acuerdo, es el código anterior que es anteriorSwift.Result
. Sin embargo, eso no tiene nada que ver con el problema.Respuestas:
Descubrí que también puede silenciar este error tratando el valor asociado más como una tupla envolviéndolo en un conjunto adicional de corchetes:
fuente
let
embargo, considere la posibilidad de moverlo si va a vincular todo:case let .value( (staff, locations) ):
ycase .value( let (staff, locations) ):
ambos compilan. ¡Elige tu favorito!Ok, lo descubrí. Parece que
enum
con los valores asociados, donde el tipo de valor es una tupla, ya no se puede hacer coincidir en una declaración de cambio como esa:Solución
Los valores de tupple deben extraerse manualmente en Xcode 11.4 (Swift 5.2):
fuente
Este es un problema conocido: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes
Por ejemplo, omitir paréntesis al encender un Opcional de un tipo de tupla provoca un error de compilación:
}
Solución alternativa : agregue paréntesis adicionales para tuplar explícitamente el patrón:
}
fuente
Si puedo, me gustaría agregar una respuesta para la
if case
versión también.y luego, por supuesto, ignorando el caso:
fuente