¿Por qué debo crear una variable fuera de switch/case? Por ejemplo, este código tendrá un error Cannot find 'size' in scope :
func sizeCheckNoVar(value: Int) -> String { switch value { case 0...2: let size = "small" case 3...5: let size = "medium" case 6...10: let size = "large" default: let size = "huge" } return size }Hay una condición predeterminada y AFIK todas las opciones están cubiertas.
Al mismo tiempo, este código estará bien:
func sizeCheckVar(value: Int) -> String { var size: String switch value { case 0...2: size = "small" case 3...5: size = "medium" case 6...10: size = "large" default: size = "huge" } return size }PD: vi esta pregunta No se puede encontrar la variable en el alcance , pero quiero saber por qué en lugar de cómo evitar
Un par de llaves se llama alcance .
En Swift (a diferencia de otros idiomas) existe una regla simple pero férrea:
Una variable declarada dentro de un alcance, en su caso particular dentro de la declaración de switch , es visible en su propio alcance y en un nivel inferior, como en su segundo ejemplo
No es visible en un nivel superior fuera del alcance, como en su primer ejemplo.
Incluso puede declarar el size como constante porque se garantiza que se inicializará.
func sizeCheckVar(value: Int) -> String { let size: String switch value { case 0...2: size = "small" case 3...5: size = "medium" case 6...10: size = "large" default: size = "huge" } return size } Sin embargo, en realidad no necesita la variable local en absoluto. Simplemente return los valores inmediatamente
func sizeCheckVar(value: Int) -> String { switch value { case 0...2: return "small" case 3...5: return "medium" case 6...10: return "large" default: return "huge" } } Nota al margen: los dos puntos en una declaración de switch también son una especie de separador de alcance; de lo contrario, obtendría errores sobre la redeclaración de variables en el primer ejemplo.