Wie rufe ich Objective-C-Code von Swift auf?

974

Wie ruft man in Swift Objective-C-Code auf?

Apple erwähnte, dass sie in einer Anwendung nebeneinander existieren könnten. Bedeutet dies jedoch, dass alte in Objective-C erstellte Klassen technisch wiederverwendet werden könnten, während neue Klassen in Swift erstellt werden?

David Mulder
quelle
13
Siehe Apples Handbuch zur Verwendung von Swift mit Kakao und Objective-C .
Rickster
10
Interessant, dass diese Frage so viele positive Stimmen und ein Kopfgeld bekommt. Als ich es zum ersten Mal sah, dachte ich nur: RTFM. Wie gestellt, zeigt es wirklich keine Forschung, da es derzeit nur zwei oder drei Ressourcen gibt, die Swift offiziell dokumentieren, und eine davon ist genau diesem Thema gewidmet (und wird im ersten Kommentar verlinkt).
Analoge Datei
6
@EvolGate: Was genau fehlt in Ziel C, das verhindert, dass es eine plattformunabhängige Sprache ist? Die Sprache und die Sprachstandardbibliotheken sind Open Source. Sie können Objective C in und für Windows, Os X, Linux, BSD, Solaris und jede andere von GCC oder LLVM unterstützte Plattform verwenden. Sie können Objective C mit einem anständigen C-Compiler problemlos auf jede Plattform portieren, selbst wenn es weder von GCC noch von LLVM unterstützt wird. Ich sehe nicht ein, wie es plattformunabhängiger sein könnte.
Analoge Datei
2
@DavidMulder: Wird der Abschnitt "The Reasoning" noch benötigt?
Franck

Antworten:

1394

Verwenden von Objective-C-Klassen in Swift

Wenn Sie bereits eine Klasse haben, die Sie verwenden möchten, führen Sie Schritt 2 aus und fahren Sie dann mit Schritt 5 fort . (In einigen Fällen musste ich #import <Foundation/Foundation.heiner älteren Objective-C-Datei eine explizite Datei hinzufügen .)

Schritt 1: Hinzufügen der Objective-C-Implementierung - .m

Fügen Sie .mIhrer Klasse eine Datei hinzu und benennen Sie sie CustomObject.m.

Schritt 2: Bridging Header hinzufügen

Wenn Sie Ihre .mDatei hinzufügen , wird wahrscheinlich eine Eingabeaufforderung angezeigt, die folgendermaßen aussieht:

Ein Dialogfeld im MacOS-Blattstil von Xcode, in dem Sie gefragt werden, ob Sie "einen Objective-C-Bridging-Header konfigurieren möchten".

Klicken Sie auf Ja !

Wenn Sie die Eingabeaufforderung nicht gesehen oder Ihren Bridging-Header versehentlich gelöscht haben, fügen Sie .hIhrem Projekt eine neue Datei hinzu und benennen Sie sie <#YourProjectName#>-Bridging-Header.h.

In einigen Situationen, insbesondere wenn Sie mit Objective-C-Frameworks arbeiten, fügen Sie keine Objective-C-Klasse explizit hinzu, und Xcode kann den Linker nicht finden. Erstellen Sie in diesem Fall Ihre .hDatei mit dem oben genannten Namen und stellen Sie dann sicher, dass Sie den Pfad in den Projekteinstellungen Ihres Ziels wie folgt verknüpfen:

Eine Animation, die den obigen Absatz demonstriert

Hinweis:

Es wird empfohlen, Ihr Projekt mithilfe des $(SRCROOT)Makros zu verknüpfen , damit es weiterhin funktioniert, wenn Sie Ihr Projekt verschieben oder mit anderen über ein Remote-Repository daran arbeiten. $(SRCROOT)kann als das Verzeichnis angesehen werden, das Ihre .xcodeproj-Datei enthält. Es könnte so aussehen:

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

Schritt 3: Fügen Sie den Objective-C-Header hinzu - .h

Fügen Sie eine weitere .hDatei hinzu und benennen Sie sie CustomObject.h.

Schritt 4: Erstellen Sie Ihre Objective-C-Klasse

Im CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

Im CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

Schritt 5: Klasse zum Bridging-Header hinzufügen

In YourProject-Bridging-Header.h:

#import "CustomObject.h"

Schritt 6: Verwenden Sie Ihr Objekt

In SomeSwiftFile.swift:

var instanceOfCustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
print(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

Es ist nicht erforderlich, explizit zu importieren. Dafür ist der Bridging-Header gedacht.

Verwenden von Swift-Klassen in Objective-C

Schritt 1: Neue Swift-Klasse erstellen

Fügen Sie .swiftIhrem Projekt eine Datei hinzu und benennen Sie sie MySwiftObject.swift.

In MySwiftObject.swift:

import Foundation

@objc(MySwiftObject)
class MySwiftObject : NSObject {

    @objc
    var someProperty: AnyObject = "Some Initializer Val" as NSString

    init() {}

    @objc
    func someFunction(someArg: Any) -> NSString {
        return "You sent me \(someArg)"
    }
}

Schritt 2: Importieren Sie Swift-Dateien in die ObjC-Klasse

In SomeRandomClass.m:

#import "<#YourProjectName#>-Swift.h"

Die Datei: <#YourProjectName#>-Swift.hsollte bereits automatisch in Ihrem Projekt erstellt werden, auch wenn Sie sie nicht sehen können.

Schritt 3: Verwenden Sie Ihre Klasse

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);

NSString * retString = [myOb someFunctionWithSomeArg:@"Arg"];

NSLog(@"RetString: %@", retString);

Anmerkungen:

  1. Wenn sich die Code-Vervollständigung nicht wie erwartet verhält, führen Sie einen schnellen Build mit aus R, damit Xcode einen Teil des Objective-C-Codes aus einem Swift-Kontext findet und umgekehrt.

  2. Wenn Sie .swifteinem älteren Projekt eine Datei hinzufügen und die Fehlermeldung erhalten dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib, starten Sie Xcode vollständig neu .

  3. Während es ursprünglich möglich war, reine Swift-Klassen (keine Nachkommen von NSObject) zu verwenden, die für Objective-C unter Verwendung des @objcPräfixes sichtbar sind , ist dies nicht mehr möglich. Um in Objective-C sichtbar zu sein, muss das Swift-Objekt entweder eine Klasse sein, die der Konformität entspricht NSObjectProtocol(der einfachste Weg, dies zu tun, besteht darin, von dieser zu erben NSObject), oder eine enumMarkierung @objcmit einem Rohwert eines ganzzahligen Typs wie Int. Sie können den Bearbeitungsverlauf für ein Beispiel für Swift 1.x-Code @objcohne diese Einschränkungen anzeigen .

Logan
quelle
5
Es ist wichtig, dass Sie Methoden mit @objc kommentieren müssen, da Swift-Methoden in Objective-C nicht sichtbar sind.
Tomáš Linhart
29
Du hast recht. Sie müssen es nur angeben, wenn Sie keine Cocoa-Objekte verwenden. Um in Objective-C zugänglich und verwendbar zu sein, muss eine Swift-Klasse ein Nachkomme einer Objective-C-Klasse sein oder mit @objc gekennzeichnet sein.
Tomáš Linhart
2
@ MarkusRautopuro - Habe es von hier bekommen: developer.apple.com/library/prerelease/ios/documentation/Swift/… "
Logan
2
Siehe auch: WWDC 2014 Session 406: Integration von Swift in Objective-C
Stuart M
6
Wenn Sie ein Objective C-Framework in Swift importieren, stellen Sie sicher, dass Sie alle Frameworks, von denen das Obj C-Framework abhängt, in Ihr Projekt importieren (unter Build-Phasen -> Binär mit Bibliotheken verknüpfen), und fügen Sie dann # Imports für diese zu einer Präfix-Header-Datei hinzu muss Ihrem Projekt in den Build-Einstellungen hinzugefügt werden (im Feld Präfix-Header). Dies schließt Frameworks wie UIKit und Foundation ein, auch wenn diese bereits in Swift verwendet werden. Das hat mich stundenlang gestolpert, und niemand scheint diese Schritte dokumentiert zu haben.
user1021430
121

Siehe Apples Handbuch zur Verwendung von Swift mit Kakao und Objective-C . Dieses Handbuch behandelt die Verwendung von Objective-C- und C-Code von Swift und umgekehrt und enthält Empfehlungen zum Konvertieren eines Projekts oder zum Mischen und Anpassen von Objective-C / C- und Swift-Teilen in einem vorhandenen Projekt.

Der Compiler generiert automatisch die Swift-Syntax zum Aufrufen von C-Funktionen und Objective-C-Methoden. Wie in der Dokumentation zu sehen ist, ist dieses Ziel-C:

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

verwandelt sich in diesen Swift-Code:

let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

Xcode führt diese Übersetzung auch im laufenden Betrieb durch. Sie können Open Quickly verwenden, während Sie eine Swift-Datei bearbeiten und einen Objective-C-Klassennamen eingeben, und Sie gelangen zu einer Swift-ified-Version des Klassenheaders. (Sie können dies auch erhalten, indem Sie mit der Cmd auf ein API-Symbol in einer Swift-Datei klicken.) Die gesamte API-Referenzdokumentation in den Entwicklerbibliotheken für iOS 8 und OS X 10.10 (Yosemite) ist sowohl in Objective-C als auch in Swift sichtbar Formen (zB UIView).

Rickster
quelle
3
Der direkte Link zur Apple-Dokumentation zur Integration von Swift in ein bestehendes Projekt: developer.apple.com/library/prerelease/ios/documentation/Swift/…
skywinder
Wenn Sie interessiert sind, warum Header-Dateien benötigt werden und wie sie während der Verknüpfungsphase verwendet werden, lesen Sie unbedingt dieses Handbuch Swift: Grundlegendes zur Swift / Objective-C-Build-Pipeline
Honey
62

Hier finden Sie schrittweise Anweisungen zur Verwendung von Objective-C-Code (in diesem Fall eines von einem Drittanbieter bereitgestellten Frameworks) in einem Swift-Projekt:

  1. Fügen Sie Ihrem Swift-Projekt eine beliebige Objective-C-Datei hinzu, indem Sie Datei -> Neu -> Neue Datei -> Objective-C-Datei wählen. Beim Speichern fragt Xcode, ob Sie einen Bridging-Header hinzufügen möchten . Wählen Sie " Ja ". (Quelle: derrrick.com )Gif: Hinzufügen einer leeren Datei zum Projekt und Generieren eines Bridging-Headers

In einfachen Schritten:

  1. Eine Eingabeaufforderung wird angezeigt, und klicken Sie dann auf OK. Wenn sie nicht angezeigt wird, erstellen wir sie manuell wie folgt: Erstellen Sie eine Header-Datei aus einer iOS-Quelle und geben Sie den Namen ProjectName-Bridging-Header an (Beispiel: Test -Bridging-Header), und gehen Sie dann zur Build-Einstellung im Swift-Compiler-Code -> Objective-C-Bridge und fügen Sie den Objective-C-Bridge-Namen hinzu. (Test / Test-Bridging-Header.h). Ja, das ist komplett.

  2. Löschen Sie optional die von Ihnen hinzugefügte Objective-C-Datei (im obigen GIF-Bild als "irgendetwas" bezeichnet). Du brauchst es nicht mehr.

  3. Öffnen Sie die Bridging-Header-Datei - der Dateiname hat die Form [YourProject] -Bridging-Header.h . Es enthält einen von Xcode bereitgestellten Kommentar. Fügen Sie eine Codezeile für die Objective-C-Datei hinzu, die Sie einschließen möchten , z. B. ein Framework eines Drittanbieters. Um beispielsweise Mixpanel zu Ihrem Projekt hinzuzufügen, müssen Sie der Bridging-Header-Datei die folgende Codezeile hinzufügen:

    #import "Mixpanel.h"
  4. Jetzt können Sie in jeder Swift-Datei vorhandenen Objective-C-Code in der Swift-Syntax verwenden (in diesem Beispiel können Sie Mixpanel SDK-Methoden usw. aufrufen). Sie müssen sich damit vertraut machen, wie Xcode Objective-C in Swift übersetzt. Apples Leitfaden ist eine schnelle Lektüre. Oder sehen Sie sich diese Antwort für eine unvollständige Zusammenfassung an.

Beispiel für Mixpanel:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    Mixpanel.sharedInstanceWithToken("your-token")
    return true
}

Das ist es!

Hinweis: Wenn Sie die Bridging-Header-Datei aus Ihrem Projekt entfernen, gehen Sie in die Build-Einstellungen und entfernen Sie den Wert für " Objective-C Bridging-Header " unter "Swift Compiler - Code Generation".

Derrrick
quelle
39

Sie können den schönen Beitrag Swift & Cocoapods lesen . Grundsätzlich müssen wir eine Bridging-Header-Datei erstellen und alle Objective-C-Header dort ablegen. Und dann müssen wir es aus unseren Build-Einstellungen referenzieren. Danach können wir den Objective-C-Code verwenden.

let manager = AFHTTPRequestOperationManager()
manager.GET(
  "http://example.com/resources.json",
  parameters: nil,
  success: { (operation: AFHTTPRequestOperation!,
              responseObject: AnyObject!) in
      println("JSON: " + responseObject.description)
  },
  failure: { (operation: AFHTTPRequestOperation!,
              error: NSError!) in
      println("Error: " + error.localizedDescription)
  })

Schauen Sie sich auch Apples Dokument Using Swift with Cocoa und Objective-C an.

Jake Lin
quelle
25

Ich habe ein einfaches Xcode 6-Projekt geschrieben, das zeigt, wie man C ++ -, Objective-C- und Swift-Code mischt:

https://github.com/romitagl/shared/tree/master/C-ObjC-Swift/Performance_Console

Das Beispiel ruft insbesondere eine Objective-C- und eine C ++ - Funktion von Swift auf .

Der Schlüssel besteht darin, einen gemeinsam genutzten Header, Project-Bridging-Header.h, zu erstellen und die Objective-C-Header dort abzulegen.

Bitte laden Sie das Projekt als vollständiges Beispiel herunter.

Gian Luigi Romita
quelle
24

Eine weitere Sache möchte ich hier hinzufügen:

Ich bin sehr dankbar für die Antwort von @ Logan. Es ist sehr hilfreich, eine Bridge-Datei und Setups zu erstellen.

Aber nach all diesen Schritten bekomme ich immer noch keine Objective-C-Klasse in Swift.

Ich habe die cocoapodsBibliothek benutzt und in mein Projekt integriert. Welches ist pod "pop".

Wenn Sie also Objective-C-Pods in Swift verwenden, besteht möglicherweise die Möglichkeit, dass Sie importdie Klassen nicht in Swift aufnehmen können.

Das Einfache, was Sie tun müssen, ist:

  1. Gehe zur <YOUR-PROJECT>-Bridging-HeaderDatei und
  2. Ersetzen Sie die Anweisung #import <ObjC_Framework>durch@import ObjC_Framework

Zum Beispiel: (Pop-Bibliothek)

Ersetzen

#import <pop/POP.h>

mit

@import pop;

Verwenden Sie, clang importwenn #importnicht funktioniert.

Kampai
quelle
Verwenden Sie den Clang-Import, wenn #import nicht funktioniert. Was? Haben wir nicht nur gesagt, wir sollten @import verwenden ?!
Honey
22

Zitat aus der Dokumentation :

Jedes Objective-C-Framework (oder jede C-Bibliothek), auf das als Modul zugegriffen werden kann, kann direkt in Swift importiert werden. Dies umfasst alle Objective-C-Systemframeworks wie Foundation, UIKit und SpriteKit sowie die mit dem System gelieferten allgemeinen C-Bibliotheken. Um beispielsweise Foundation zu importieren, fügen Sie diese Importanweisung einfach oben in die Swift-Datei ein, in der Sie arbeiten:

import Foundation

Durch diesen Import werden alle Foundation-APIs - einschließlich NSDate, NSURL, NSMutableData und alle ihre Methoden, Eigenschaften und Kategorien - direkt in Swift verfügbar.

Gergo Erdosi
quelle
12

Nur ein Hinweis für alle, die versuchen, Swift eine Objective-C-Bibliothek hinzuzufügen: Sie sollten -ObjC unter Build-Einstellungen -> Verknüpfen -> Andere Linker-Flags hinzufügen .

david72
quelle
Warum? Bitte fügen Sie Informationen darüber hinzu, was dieses Flag bewirkt und warum es hinzugefügt werden sollte.
Johan Karlsson
9

Nachdem Sie einen Bridging-Header erstellt haben, gehen Sie zu Build Setting => Suche nach "Objective-C Bridging Header".

Direkt darunter finden Sie die Datei "" Objective-C Generated Interface Header Name ".

Importieren Sie diese Datei in Ihren View Controller.

Beispiel: In meinem Fall: "Dauble-Swift.h"

eEter Bildbeschreibung hier

Avijit Nagare
quelle
5

Klicken Sie auf das Menü Neue Datei und wählen Sie die Dateiauswahlsprache Ziel. Zu diesem Zeitpunkt wird automatisch eine "Objective-C Bridging Header" -Datei generiert, mit der ein Klassenname definiert wird.

"Objective-C Bridging Header" unter "Swift Compiler - Code Generation".

Yogesh Shelke
quelle
3
  1. Erstellen Sie eine .h-Datei aus NewFile -> Source -> Header-Datei
  2. Speichern Sie dann den Namen der Datei Your_Target_Name-Bridging-Header.h. Die Leute hier bekommen häufig Fehler, wenn sie ihren Projektnamen verwenden. Es sollte jedoch der Name des Projektziels sein, wenn beide unterschiedlich sind, sind sie im Allgemeinen gleich.
  3. Suchen Sie dann in den Build-Einstellungen nach dem Flag " Objective-C Bridging Header" und geben Sie die Adresse Ihrer neu erstellten Bridging-Datei ein. Klicken Sie dazu mit der rechten Maustaste auf die Datei -> Im Finder anzeigen -> ziehen Sie die Datei in den Textbereich, dann wird die Adresse angezeigt bevölkert sein.
  4. Verwenden von #import Your_Objective-C_file.h
  5. In der Swift-Datei können Sie auf die ObjC-Datei zugreifen, jedoch nur in Swift-Sprache.
Nish
quelle
3

Geben Sie hier die Bildbeschreibung einIch habe das Projekt auf Github hinzugefügt, das ein kleines Beispiel enthält, um den objektiven C-Code von Swift aufzurufen.

Rufen Sie die ObjectiveC-Klasse von swift aus auf

CrazyPro007
quelle
HINWEIS: - Wenn Sie eine Objc-Klasse in einem schnellen Projekt erstellen, fordert xcode die automatische Überbrückung der Klasse an. Keine Sorge :)
CrazyPro007
3

Im Swift 4.2.1-Projekt in Xcode 10.1 können Sie problemlos eine Objective-C-Datei hinzufügen. Führen Sie die folgenden Schritte aus, um die Objective-C-Datei mit dem Swift-Projekt zu verbinden.

Schritt_01: Erstellen Sie ein neues Xcode-Projekt in der Swift-Sprache:

File> New> Project> objc.

Schritt_02: Fügen Sie im Swift-Projekt eine neue Objective-C-Datei hinzu:

File> New> File...> macOS> Objective-C File.

Schritt_03: Wenn Sie Swift Project zum ersten Mal eine neue Objective-C-Datei hinzufügen, werden Sie von Xcode gefragt:

Would you like to configure an Objective-C bridging header?

Geben Sie hier die Bildbeschreibung ein

Schritt_04: Wählen Sie die Option:

Create Bridging Header.

Schritt_05: Eine entsprechende Datei wird mit einem Namen generiert:

Objc-Bridging-Header.h.

Geben Sie hier die Bildbeschreibung ein

Schritt_06: Jetzt müssen Sie den Bridge-Dateipfad im Bridge-Header einrichten. Klicken Sie im Projektnavigator auf Projekt mit Namen objcund wählen Sie dann:

Build Settings> Objective-C Bridging Header> Objc-Bridging-Header.h.

Schritt_07: Ziehen Sie Ihre Objc-Bridging-Header.hDatei in dieses Feld, um einen Dateipfad zu generieren.

Geben Sie hier die Bildbeschreibung ein

Schritt_08: Öffnen Sie Ihre Objc-Bridging-Header.hDatei und importieren Sie die Objective-C-Datei, die Sie in Ihrer Swift-Datei verwenden möchten.

#import "SpecialObjcFile.m"

Hier ist ein Inhalt von SpecialObjcFile.m:

#import <Foundation/Foundation.h>

@interface Person: NSObject {
@public
    bool busy;
}
@property
    bool busy;
@end

Schritt_09: Jetzt können Sie in Ihrer Swift-Datei eine Objective-C-Klasse verwenden:

override func viewDidLoad() {
    super.viewDidLoad()
    let myObjcContent = Person()
    print(myObjcContent.busy)
}

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Andy
quelle
1

Die Antwort von Logans funktioniert einwandfrei, außer dass in letzter Zeit Swift 5ein Compilerfehler auftritt. Hier ist der Fix für Leute, die an Swift 5 arbeiten.

Swift 5

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val" as AnyObject

    override init() {}

    func someFunction(someArg:AnyObject) -> String {
        let returnVal = "You sent me \(someArg)"
        return returnVal
    }
}
Sazzad Hissain Khan
quelle
1

Schneller Verbraucher, Objective-C-Produzent

  1. Fügen Sie einen Header .hund .mImplementierungsdateien - Cocoa Klassendatei (Objective-C)
    Zum BeispielMyFileName

  2. Bridging-Header konfigurieren
    Wenn Sie sehen, Would you like to configure an Objective-C bridging headerklicken Sie auf - Ja

    • <target_name>-Bridging-Header.h wird automatisch generiert
    • Build-Einstellungen -> Objective-C-Bridging-Header
  3. In der Klasse zu Bridging-Header -
    In <target_name>-Bridging-Header.hfügen Sie eine Zeile#import "<MyFileName>.h"

PS Wenn Sie vorhandene Objective-C-Dateien zum Swift-Projekt hinzufügen sollten, fügen Sie diese Bridging-Header.hvorher hinzu

Objective-C-Verbraucher, Swift-Produzent

  1. Fügen Sie ein <MyFileName>.swiftund erweitertNSObject

  2. Importieren von Swift-Dateien in die ObjC-Klasse
    Fügen Sie sie #import "<#YourProjectName#>-Swift.h"in Ihre Objective-C-Datei ein

  3. Markieren Sie den öffentlichen Swift-Code [@objc und @objcMembers].

yoAlex5
quelle
0

Apple hat in diesem Dokument einen offiziellen Leitfaden bereitgestellt: How-to-Call-Objective-C-Code-from-Swift

Hier ist der relevante Teil:

Um eine Reihe von Objective-C-Dateien in Swift-Code innerhalb desselben App-Ziels zu importieren, verwenden Sie eine Objective-C-Bridging-Header-Datei, um diese Dateien für Swift verfügbar zu machen . Xcode bietet an, diesen Header zu erstellen, wenn Sie einer vorhandenen Objective-C-App eine Swift-Datei oder einer vorhandenen Swift-App eine Objective-C-Datei hinzufügen.

Wenn Sie zustimmen, erstellt Xcode die Bridging-Header-Datei zusammen mit der von Ihnen erstellten Datei und benennt sie unter Verwendung Ihres Produktmodulnamens, gefolgt von "-Bridging-Header.h". Alternativ können Sie selbst einen Bridging-Header erstellen, indem Sie Datei> Neu> Datei> [Betriebssystem]> Quelle> Header-Datei wählen

Bearbeiten Sie den Bridging-Header, um Ihren Objective-C-Code Ihrem Swift-Code zugänglich zu machen:

  1. Importieren Sie in Ihrem Objective-C-Bridging-Header jeden Objective-C-Header, den Sie für Swift verfügbar machen möchten .
  2. Stellen Sie in den Build-Einstellungen in Swift Compiler - Codegenerierung sicher, dass die Build-Einstellung für den Objective-C-Bridging-Header einen Pfad zur Bridging-Header-Datei enthält. Der Pfad sollte relativ zu Ihrem Projekt sein, ähnlich wie Ihr Info.plist-Pfad in den Build-Einstellungen angegeben ist. In den meisten Fällen müssen Sie diese Einstellung nicht ändern.

Alle öffentlichen Objective-C-Header, die im Bridging-Header aufgeführt sind, sind für Swift sichtbar.

Tibin Thomas
quelle
0

Zwei-Wege-Ansatz zur Verwendung von Ziel-c Ziel-c

1

  1. Erstellen Sie die Datei bridge-header.h in Xcode Project
  2. Importieren Sie die .h-Datei in die Bridge-Header-Datei
  3. Legen Sie den Pfad des Bridge-Headers in den Build-Einstellungen fest.
  4. Reinigen Sie das Projekt

2

  1. Erstellen Sie Objective-C-Dateien im Projekt (der Pfad in den Build-Einstellungen wird automatisch für Sie festgelegt).
  2. Importieren Sie die .h-Datei in die Bridge-Header-Datei

Nun gut, danke

Sanjay Mali
quelle