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?
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.
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.
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".
Abra el nuevo archivo Swift que acaba de crear.
Debe importar UIKit
(en lugar de Foundation
) si está extendiendo un UIView
. Luego use la extension
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.
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 de UIImage
, pero como puede ver, se usa tal como estaba.
En Swift se llama Extensiones . Echale un vistazo
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(){
}
}
extension
.