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

284
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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