Nell'obiettivo C erano chiamati categories, ma in Swift sono chiamati extensions. Lo scopo di entrambi è di fornire funzionalità aggiuntive alle classi esistenti senza dover creare sottoclassi.
Avevo letto delle estensioni nella documentazione, ma non ho davvero capito come utilizzarne una nel mio progetto finché non ho guardato this tutorial video (YouTube version, github source).
Ecco un riepilogo tratto dal video di come farlo.
aggiungere un file Swift al progetto
clic destro nella navigazione di progetto e scegliere "Nuovo file ..."
Selezionare 'File Swift'
La convenzione è quello di salvare il nome del file come il nome di classe si sta estendendo più (con un segno '+') quello che state facendo ad esso. Per esempio, "UIImage + ritaglio".
scrivere il codice per l'estensione
Aprire il nuovo file Swift appena creato.
si shou Importare UIKit
(anziché Foundation
) se si estende un UIView
. Quindi utilizzare la parola chiave extension
prima del nome della classe che si desidera estendere. È quindi possibile aggiungere i propri nuovi metodi alla classe. (Nota, le estensioni sono per aggiungere nuovi metodi, non sovrascrivere i metodi esistenti - da cui il nome.)
Nel video, l'esempio era di aggiungere un metodo che ritaglia un cerchio dall'immagine e gli dà un bordo.
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
Vedere here per l'esempio completo.
Usa la tua estensione in qualsiasi punto del progetto
Ora è possibile utilizzare il nuovo metodo per quella classe qualsiasi punto del codice, proprio come lo era parte della classe standard.
Ecco l'esempio del video (on 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)
}
}
Il metodo cropToCircleWithBorderColor
non è una parte standard del UIImage
, ma come si può vedere, è utilizzato proprio come si trattasse.
Per ulteriori approfondimenti:
si chiama 'extension'. – holex