visual studio microsoft español descargar community ios macos swift naming-conventions

ios - studio - Funciones de extensión de prefijo



visual studio installer (2)

Hay algo de sutileza aquí:

Las extensiones de los tipos de Objective-C se implementan como categorías de Objective-C, con todo lo que eso implica.

Sin embargo, las extensiones de los tipos Swift solo están vigentes cuando son visibles debido a las importaciones. Esto significa que no puede pisar accidentalmente un método de sistema privado (ya sea ahora o uno introducido en el futuro), y si el sistema introduce un método público con el mismo nombre que el suyo, obtendrá un error de compilación cuando reconstruyes, pero tu aplicación existente no se romperá.

En Swift ya no es necesario prefijar clases ya que su módulo actúa como el espacio de nombres.

¿Qué pasa con las funciones de extensión de prefijo? Por ejemplo:

extension UIImage { public func hnk_hasAlpha() -> Bool { ... } }

Por un lado, Swift no es dinámico, por lo que las colisiones generarían errores de compilación.

Pero, ¿qué sucede si el código compilado se ejecuta en una futura versión de iOS / OS X en la que se agrega uno de mis métodos de extensión? ¿Los métodos en diferentes módulos serían considerados símbolos diferentes incluso si tuvieran la misma firma?

¿Hace una diferencia si la clase extendida es una subclase NSObject o una clase Swift pura?


También deberías revisar esos hilos:

Las colisiones de nombres para los métodos de extensión de diferentes marcos - citar desde el hilo: "independientemente del código de la aplicación importa qué marco, al parecer, la implementación llamada real depende del orden en los marcos y bibliotecas vinculados en la forma de" primero en llegar, primero en ser servido ". que yo sepa, este comportamiento no está garantizado ".

y Swift Extension: la misma función de extensión en dos módulos que también confirma el mismo problema.

Por lo tanto, en función de los objetos Objective-C, como UIImage de su nombre, es posible que haya colisiones y es posible que vea un comportamiento inesperado si habrá dos métodos con el mismo nombre en dos extensiones diferentes para el objeto Objective-C.