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

278
Vistas
Los métodos delegados en la clase secundaria a veces no se llaman con el compilador Swift 5

EDITAR: como Sunshine Jr señaló aquí , esto se solucionó y se lanzará junto con la próxima versión de Xcode/Swift.


He visto muchos comportamientos extraños después de actualizar Xcode 10.1 a Xcode 10.2, ambos con bases de código Swift 4 y Swift 5.

Uno de los problemas es que en un ViewController ya no se llama a los métodos de delegado de ScrollView. La jerarquía de vista simplificada es la siguiente:

 | ScrollView (ParentScrollView) | -- Stack View | ---- ScrollView (ChildScrollView) | ---- ScrollView (ChildScrollView) | ---- ScrollView (ChildScrollView)

Actúa como una vista con varias páginas: ParentScrollView se puede desplazar horizontalmente, ChildScrollView verticalmente.

ViewController es el delegado de todas las vistas de desplazamiento (establecidas en Storyboard), pero los métodos delegados (como scrollViewDidEndDecelerating ) no se llaman al desplazarse por cualquiera de las vistas (ParentScrollView o ChildScrollView). La clase base de ViewController se ajusta a UIScrollViewDelegate .

He intentado configurar los delegados en el código, aparte de eso, no tengo idea de qué podría estar haciendo mal. La conversión no cambió ningún código en la clase, pero todo funcionó bien antes de la actualización. Tampoco pude encontrar ningún cambio en los gestos, delegados o ScrollViews en general en las Notas de la versión de Swift 5 .

Esto parece ser un error con el compilador Swift 5. Además, a veces funciona, a veces no, todo sin cambiar ningún código o configuración del proyecto.

¿Por qué esto ya no funciona? ¿Alguien más ha experimentado un comportamiento similar?

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

0

EDITAR: como Sunshine Jr señaló aquí , esto se solucionó y se lanzará junto con la próxima versión de Xcode/Swift.


Encontré el problema, aquí se explica cómo reproducirlo.

 class A: UIViewController, UIScrollViewDelegate { // ...does not implement 'scrollViewDidEndDecelerating' } class B: A { func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { // Will not be called! } }

Que funciona:

 class A: UIViewController, UIScrollViewDelegate { func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { // Probably empty } } class B: A { override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { // Will be called! } }

El compilador parece pensar que un método delegado no está implementado si la clase base no lo implementó. Si solo la clase secundaria lo implementa, no puede encontrarlo.

Todavía no puedo explicar por qué este comportamiento cambió con Swift 5, pero al menos encontré una solución. ¿Quizás alguien pueda dar más información?

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que este problema también existió en 2016 y se solucionó en un punto: https://bugs.swift.org/browse/SR-2919

over 4 years ago · Santiago Trujillo Denunciar

0

Nos encontramos con esto con un UITextViewDelegate

Otra solución es agregar la etiqueta @objc al método en la superclase

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