Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
Error de segmentación en Swift

Recibo el siguiente error cuando ejecuto una ejecución swift run dentro de un paquete Swift ejecutable:

 zsh: segmentation fault swift run

He podido reducir el código a lo siguiente:

 enum MyEnum { case FirstCase case SecondCase case Other } struct MyEnumCollection { private var enums: [MyEnum] } extension MyEnumCollection: RangeReplaceableCollection { public init() { self.enums = [] } } extension MyEnumCollection: Collection { public var startIndex: Int { 0 } public var endIndex: Int { self.enums.count } public subscript(position: Int) -> MyEnum { return self.enums[position] } public func index(after i: Int) -> Int { return self.enums.index(after: i) } } var collection = MyEnumCollection() collection.append(MyEnum.FirstCase)

La falla de segmentación ocurre en la última línea, en la declaración de append .

¿Puede alguien ayudarme a entender por qué sucede esto y cómo debo solucionarlo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Actualizar

Gracias a un comentario de @MartinR, resulta que una solución aún mejor es implementar replaceSubrange(_:with:) del protocolo RangeReplaceableCollection en lugar de append

 mutating func replaceSubrange<C>(_ subrange: Range<Int>, with newElements: C) where C : Collection, MyEnum == C.Element { self.enums.replaceSubrange(subrange, with: newElements) }

Solución antigua

Necesitas implementar append() también

 public mutating func append(_ newElement: MyEnum) { enums.append(newElement) }

Hay una implementación predeterminada de esta función pero, por supuesto, no tiene conocimiento sobre las enums de fuentes de datos internas, por lo que no se puede utilizar.


En el futuro, es posible que también deba implementar otras funciones que tengan una implementación predeterminada.

Otra cosa, personalmente, también usaría las propiedades de la clase Array al cumplir con el protocolo.

 public var startIndex: Int { return enums.startIndex } public var endIndex: Int { return self.enums.endIndex }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda