Tengo una pregunta sobre el cambio de caso en Swift. tengo una estructura
struct State { static let initialized = "init" static let ready = "ready" static let recording = "recording" static let finished = "finished" static let error = "error" }y quiero devolver UIImage según el estado actual.
func getHeaderIconImage(from status: String) -> UIImage { var result = UIImage() switch status { case State.ready, State.finished: result = Images.ready case State.recording: result = Images.ongoing case State.initialized, State.error: result = Images.notReady default: result = Images.notReady } return result } Básicamente, la parte predeterminada no debe activarse, pero sin la parte predeterminada, Swift me gritará con Switch must be exhaustive , por lo que debo incluir el caso predeterminado. Dado que hago exactamente lo mismo para el caso .inicializado, .error y el caso predeterminado, probablemente sea mejor combinar esas tres partes y solo debo escribirlo en el caso predeterminado. Sin embargo, pensé que si también puedo escribir el caso .inicializado y el caso .error, es más claro ya que puedo enumerar todos los casos en el caso del interruptor.
Entonces, me preguntaba si hay una manera de refactorizar el estado del interruptor para combinar el caso predeterminado con algunos otros casos si hacen exactamente lo mismo. ¿O no puedo y dejo el caso .init & .error y predeterminado, o me deshago de la parte .init & .error?
Está cambiando un valor de cadena. El compilador no sabe que solo está utilizando las propiedades estáticas de su estructura de State y, técnicamente, no está limitado a eso. Entonces, en este caso, el compilador sabe que otros valores de cadena son posibles y necesita agregar un caso default . Cuando usas una enumeración:
enum State: String { case initialized = "init" case ready = "ready" case recording = "recording" case finished = "finished" case error = "error" } El compilador conoce todos los casos posibles y no lo obligará a usar un caso default .
Usando la enumeración, su función debería verse así: getHeaderIconImage(from status: State) -> UIImage