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

369
Visualizações
No se admite la anulación de declaraciones que no sean @objc de extensiones

Aparentemente, de la nada, comencé a recibir cientos de errores asociados con dos funciones de extensión que uso con frecuencia.

Intenté comentar todo el código nuevo que precede a este error. También intenté limpiar mi carpeta de compilación. ¿Cómo me deshago del error que se encuentra en el título de esta publicación? ¿Por qué apareció aleatoriamente cuando he estado usando estas extensiones con éxito durante meses?

 extension UITableViewCell { public func getSize(large: CGFloat, medium: CGFloat, small: CGFloat) -> CGFloat { var size = CGFloat() let screenHeight = Int(UIScreen.main.bounds.height) if screenHeight >= 800 { size = large } else if screenHeight >= 600 { size = medium } else { size = small } return size } public func formatPrice(_ price: Int) -> String { let lastDigit = price % 10 var stringPrice = "" if lastDigit == 0 { stringPrice = "$\(Double(price) / 100)0" } else { stringPrice = "$\(Double(price) / 100)" } return stringPrice } }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si agrega funciones a una clase en una extensión (es decir, no están en la definición de clase), esos métodos se envían estáticamente en Swift porque el compilador no puede agregar los métodos a la vtable de la clase (es decir, la vtable debe crearse en tiempo de compilación , pero puede agregar una extensión más tarde, como en otro módulo). Esta es la razón por la que el compilador se queja de que no puede override los métodos (es decir, no son virtuales).

El envío de Objective C funciona de manera diferente, a través de la tabla de selección y se puede modificar incluso en tiempo de ejecución. Es por eso que el compilador dice que use @objc y, efectivamente, si hace esto, funcionará.

EJEMPLO:

Esto no se compila porque estamos tratando de anular y enviar dinámicamente una función no virtual enviada estáticamente en Swift

 extension UITableViewCell { func a() { print("UITableViewCell") } } class B: UITableViewCell { override func a() { print("B") } } let b = B() print(ba())

Esto funciona e imprime "B" porque está usando el envío del selector objc

 import UIKit import PlaygroundSupport extension UITableViewCell { @objc func a() { print("UITableViewCell") } } class B: UITableViewCell { override func a() { print("B") } } let b = B() print(ba())
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