Quiero crear una categoría de mi clase rápida existente, pero no hay ninguna opción en IDE para hacerlo.
¿Alguna idea de si la categoría existe en el proyecto rápido? ¿O cómo lograr una funcionalidad similar en un proyecto rápido?
swift
swift-extensions
Khawar
fuente
fuente
extension
.Respuestas:
En Swift, puede usar
Extensions
para agregar nuevas funciones a clases, estructuras y tipos de enumeración existentes.Se diferencian de las categorías de Objective-C de varias formas, principalmente:
Tal como está hoy, las extensiones pueden:
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 las extensiones en Swift.
fuente
En Objective C se llamaban categorías , pero en Swift se llaman extensiones . El propósito de ambos es dar funcionalidad adicional a las clases existentes sin tener que crear subclases.
Había leído sobre 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.
Agrega un archivo Swift a tu proyecto
Haga clic derecho en el Navegador de proyectos y elija "Nuevo archivo ..."
Seleccione "Archivo Swift"
La convención es guardar el nombre del archivo como el nombre de la clase que está ampliando más (con un signo "+") lo que le está haciendo. Por ejemplo, "UIImage + Recorte".
Escribe el código de la extensión.
Abra el nuevo archivo Swift que acaba de crear.
Debe importar
UIKit
(en lugar deFoundation
) si está extendiendo unUIView
. Luego use laextension
palabra clave antes del nombre de la clase que desea extender. Luego puede agregar sus propios métodos nuevos a la clase. (Tenga en cuenta que las extensiones son para agregar nuevos métodos, no 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 aquí el ejemplo completo.
Use su extensión en cualquier lugar de su proyecto
Ahora puede usar su nuevo método para esa clase en cualquier lugar de su código, como si fuera 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 deUIImage
, pero como puede ver, se usa tal como estaba.Para mayor estudio:
fuente
En Swift se llama Extensiones . Echale un vistazo
fuente
extension
s no pueden incluir variables, que hacen las cosas totalmente diferentes.Puede usar el siguiente código en su clase existente
extension name{ func funcName(){ } }
fuente