que programacion inicializadores funcion estructura datos crear computadas clases swift swift-extensions

swift - programacion - ¿Cómo crear una clase rápida para la categoría?



que es self en swift (4)

¡En Swift se llama Extensiones ! Echale un vistazo

Quiero crear una categoría de mi clase rápida existente, pero no hay ninguna opción en IDE para hacerlo.

¿Alguna idea si la categoría existe en un proyecto rápido? ¿O cómo lograr una funcionalidad similar en un proyecto rápido?


En Objective C se les llamó categories , pero en Swift se llaman extensions . El objetivo de ambos es proporcionar funcionalidad adicional a las clases existentes sin tener que crear subclases.

Había leído acerca de las extensiones en la documentación, pero realmente no entendía cómo usar una en mi proyecto hasta que vi este video tutorial ( versión de YouTube , fuente de Github ).

Aquí hay un resumen tomado del video de cómo hacerlo.

Agregue un archivo Swift a su proyecto

  • Haga clic con el botón derecho en Project Navigator y elija "Nuevo archivo ..."

  • Seleccione "Archivo Swift"

  • La convención es guardar el nombre del archivo como el nombre de clase que está extendiendo más (con un signo "+") lo que le está haciendo. Por ejemplo, "UIImage + Cropping".

Escriba el código para la extensión

Abra el nuevo archivo Swift que acaba de crear.

Debería importar UIKit (en lugar de Foundation ) si está extendiendo un UIView . Luego use la palabra clave de extension antes del nombre de la clase que desea extender. A continuación, puede agregar sus propios métodos nuevos a la clase. (Tenga en cuenta que las extensiones son para agregar nuevos métodos, sin anular los métodos existentes, de ahí el nombre).

En el video, el ejemplo fue agregar un método que recorta un círculo de la imagen y le da un borde.

import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } }

Vea here para el ejemplo completo.

Usa tu extensión en cualquier parte de tu proyecto

Ahora puede usar su nuevo método para esa clase en cualquier parte de su código, al igual que era parte de la clase estándar.

Aquí está el ejemplo del video ( en github ):

import UIKit class ViewController: UIViewController { @IBOutlet var imageView : UIImageView = nil override func viewDidLoad() { super.viewDidLoad() let img = imageView.image imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20) } }

El método cropToCircleWithBorderColor no es una parte estándar de UIImage , pero como puede ver, se usa tal como era.

Para un estudio posterior:


En Swift, puede usar Extensions para agregar nuevas funcionalidades a clases existentes, estructuras y tipos de enumeración.

Difieren de las categorías de Objective-C de varias maneras, principalmente:

  • Ellos no son nombrados
  • No necesita importar una extensión explícitamente. Si define una extensión para agregar una nueva funcionalidad a un tipo existente, la nueva funcionalidad estará disponible en todas las instancias existentes de ese tipo, incluso si se crearon antes de que se definiera la extensión.
  • Como se indicó anteriormente, funcionan no solo con clases, sino también con otros tipos.

Tal como está hoy, las Extensiones pueden:

  • Agregar propiedades calculadas y propiedades estáticas calculadas
  • Definir métodos de instancia y métodos de tipo
  • Proporcionar nuevos inicializadores
  • Definir subíndices
  • Definir y usar nuevos tipos anidados
  • Haga que un tipo existente se ajuste a un protocolo

La sintaxis básica para declarar una extensión es la siguiente:

extension SomeType { // new functionality to add to SomeType goes here }

Consulte la documentación de Apple para obtener más información sobre cómo usar Extensions en Swift.


Puedes usar el siguiente código en tu clase existente

extension name{ func funcName(){ } }