Bridging zwischen Objective-C und Swift

Es gibt Fälle, in denen Sie zu mischen und anzupassen Code zwischen dem Objective-C und Swift Sprachen. Wenn es um die Rahmenbedingungen kommt, werden die Ingenieure bei Apple über die Schnittstellen arbeiten Swift-Schnittstellen neben den Objective-C-Versionen zur Verfügung zu stellen, so dass Sie entweder ein mit dem Rahmen können in Ihrer eigenen App zu bekommen.

Manchmal braucht man eine Brücke zu verwenden, um Code zu erhalten, die Sie benötigen. Ein typisches Beispiel tritt auf, wenn Sie Core Data mit Beziehungen nutzen. Bei einem Datenmodell für Core Data (oft als Teil einer Vorlage zur Verfügung gestellt), können Sie Editor-Create NSManagedObject Subklassen verwenden, um Dateien zu erstellen, um einem Projekt hinzuzufügen. Wählen Sie die Option Objective-C-Dateien zu erstellen. Am unteren Ende der .h -Datei, die erstellt wird, werden Sie Erklärungen von Methoden für die Mitglieder der Beziehungen wie diese finden:

@interface WhereCategory (CoreDataGeneratedAccessors) - (void) addNecklaceObject: (Halskette *) value-- (void) removeNecklaceObject :( Halskette *) value-- (void) addNecklaces: (NSSet *) values-- (void) removNecklaceses: (NSSet *) Werte - d

Mit diesem Code können Sie einzelne verwandte Objekte oder die ganze Gruppe verwandter Objekte hinzufügen oder entfernen. Wenn Sie versuchen, die Dateien zu erstellen, wird eine Warnung sehen Sie gefragt, ob Sie eine Brückenkopf erstellen möchten.

Die Datei, die erstellt wird, wird benannt MyProject-Bridging-header.h. Fügen Sie einfach Import-Anweisungen auf diese Datei für die Objective-C .h Dateien, wie hier gezeigt, und Sie werden bereit sein, Ihren Mix-and-Match-Projekt zu erstellen.

// Diese Datei Verwenden Sie Ihre Ziel öffentlichen Header // zu importieren, die Sie Swift aussetzen möchten. # Import # 147-Bracelet.h # 148- # Import # 147-Pendant.h # 148-Klasse DetailViewController: UIViewController {// @ IBOutlet schwach var detailDescriptionLabel: UILabel @IBOutlet var mapView: MKMapView @IBAction func actionButton (Sender: ANYOBJECT) {} var detailItem: Event? = Nil {// ANYOBJECT? {DidSet {// Aktualisieren der view.self.configureView ()}} func configureView () {// für das Detail der Benutzeroberfläche Aktualisieren item.var pin = MKPointAnnotation () var lang: Doppel = detailItem .longitude als Doublevar lat : detailItem .latitude als Doublevar myCoordinate Doppel =: CLLocationCoordinate2D = CLLocationCoordinate2D (Breite: Breite als CLLocationDegrees, Länge: lange CLLocationDegrees) pin.coordinate = myCoordinatepin.title = # 147-Test-Titel # 148 - pin.subtitle = # 147-Test-Untertitel # 148 - wenn var myMapView = self.mapView {myMapView.addAnnotation (Pin)}} Überschreibung func viewDidLoad () {super.viewDidLoad () // Ist eine zusätzliche Einrichtung nach der Ansicht Laden, in der Regel ein nib.self.configureView ()} Überschreibung func didReceiveMemoryWarning () {super.didReceiveMemoryWarning () // Entsorgen Sie alle Ressourcen, die neu erstellt werden kann.}}

Menü