In Ziel C wurden sie als Kategorien bezeichnet , in Swift als Erweiterungen . Beide dienen dazu, vorhandenen Klassen zusätzliche Funktionen zu verleihen, ohne Unterklassen erstellen zu müssen.
Ich hatte in der Dokumentation über Erweiterungen gelesen, aber ich habe nicht wirklich verstanden, wie man eine in meinem Projekt verwendet, bis ich mir dieses Tutorial-Video ( YouTube-Version , Github-Quelle ) angesehen habe.
Hier ist eine Zusammenfassung aus dem Video, wie es geht.
Fügen Sie Ihrem Projekt eine Swift-Datei hinzu
Klicken Sie mit der rechten Maustaste in den Projektnavigator und wählen Sie "Neue Datei ...".
Wählen Sie "Swift File"
Die Konvention besteht darin, den Dateinamen als den Klassennamen zu speichern, den Sie erweitern, plus (mit einem "+" - Zeichen), was Sie damit machen. Zum Beispiel "UIImage + Cropping".
Schreiben Sie den Code für die Erweiterung
Öffnen Sie die neue Swift-Datei, die Sie gerade erstellt haben.
Sie sollten UIKit
(anstelle von Foundation
) importieren, wenn Sie a erweitern UIView
. Verwenden Sie dann das extension
Schlüsselwort vor dem Klassennamen, den Sie erweitern möchten. Sie können der Klasse dann Ihre eigenen neuen Methoden hinzufügen. (Beachten Sie, dass Erweiterungen zum Hinzufügen neuer Methoden dienen und vorhandene Methoden nicht überschreiben - daher der Name.)
Im Video wurde beispielsweise eine Methode hinzugefügt, mit der ein Kreis aus dem Bild ausgeschnitten und ihm ein Rand zugewiesen wird.
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
Sehen Sie hier für das gesamte Beispiel.
Verwenden Sie Ihre Erweiterung an einer beliebigen Stelle in Ihrem Projekt
Jetzt können Sie Ihre neue Methode für diese Klasse an einer beliebigen Stelle in Ihrem Code verwenden, genau wie sie Teil der Standardklasse war.
Hier ist das Beispiel des Videos ( auf 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)
}
}
Die Methode cropToCircleWithBorderColor
ist kein Standardteil von UIImage
, aber wie Sie sehen, wird sie sozusagen verwendet.
Für weitere Studien:
extension
.