Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

183
Visualizações
Enumeración con nombres de casos idénticos con valores asociados de diferentes tipos

El siguiente código Swift compila:

 enum GraphDataSource { case array(data: [Double], start: Double?, step: Double?) case pairs(XYValues: [Double: Double]) case pairs(dateValues: [Date: Double]) case function((Double) -> Double?) func localizedName() -> String { // TODO: Create localizable strings return NSLocalizedString(Mirror(reflecting: self).children.first?.label ?? "", comment: "") } }

Tiene dos casos de enumeración llamados pairs . Pero cuando trato de extraer el valor asociado, resulta que no puedo elegir el que quiero.

 var graphData = GraphDataSource.function(sin) switch graphData { case .pairs(dateValues: let vals): vals.keys.forEach({print($0)}) case .pairs(XYValues: let xy): // without this case everyting compiles OK xy.keys.forEach({print($0)}) default: break }

El error es: "La etiqueta del elemento de patrón de tupla 'XYValues' debe ser 'dateValues'". ¿Esto es normal? Parece que el compilador debería rechazar los casos del mismo nombre o permitir activar ambos.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Este es un error del compilador de Swift. Ver SR-10077 .

over 4 years ago · Santiago Trujillo Relatório

0

Hay dos soluciones para pasar diferentes tipos de valores asociados en un solo case :

  1. Use Any tipo para un valor asociado y luego escriba dinámicamente check/cast it:
 enum DataType { case data(_ value: Any) } func process(_ type: DataType) { switch type { case .data(let value): if value is Int { print("Int value - \(value)") } else if value is String { print("String value - \(value)") } } } process(.data(10)) // Outputs: Int value - 10 process(.data("Text")) // Outputs: String value - Text
  1. Use una enum adicional para especificar un tipo necesario:
 enum ValueType { case int(_ value: Int) case string(_ value: String) } enum DataType { case data(_ value: ValueType) } func process(_ type: DataType) { switch type { case .data(let value): switch value { case .int(let value): print("Int value - \(value)") case .string(let value): print("String value - \(value)") } } } process(.data(.int(10))) // Outputs: Int value - 10 process(.data(.string("Text"))) // Outputs: String value - Text
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda