2017-04-02 5 views
2

ich ein bisschen kompliziert Klassen in schnellen und Objective-C haben combinated zusammen:Combinating Swift & Objective C Dateien

Keypad.h:

#import "MyApp-Swift.h" 

@interface Keypad : UIViewController { 
    ... 
    SwiftViewController *swiftViewController; // this is written in swift 
    ... 
} 

Dieses gut funktioniert.

Dann habe ich eine neue flink Datei:

AnotherSwiftViewController.swift

@objc class AnotherSwiftViewController: UITableViewController { 
    func myMethod() { 
     let keypad = appDelegate.getTabs().selectedViewController as! Keypad // I need get ObjC Keypad class 
    } 
} 

Und ich brauche es die ObjcC Keypad-Klasse zu verwenden.

So habe ich es an die MyApp-Bridging-header.h:

MeineAnw-Bridging-header.h

... 
// lot of other Obj-C files imported 
... 
#import "Keypad.h" 
... 

Und ich bekomme die Fehlermeldung:

> .../MyApp-Bridging-Header.h:31:9: note: in file included from .../MyApp-Bridging-Header.h:31: #import "Keypad.h" 

> .../Keypad.h:13:9: error: 'My_App-Swift.h' file not found \#import "My_App-Swift.h" 

> <unknown>:0: error: failed to import bridging header '.../MyApp-Bridging-Header.h' 

Beliebig Ideen?

/// EDIT:

Vielleicht helfen:

Ich verwende

#import "My_App-Swift.h" 

In der Keypad.h Datei, nicht in Standard Keypad.m, weil ich es haben, dass SwiftViewController * swiftViewController; Eigenschaft

Vielleicht wird es

helfen, einen guten Punkt in Ihrem /// bearbeiten
+0

Volles Beispiel zu verwenden obj-c und swift zusammen: http://StackOverflow.com/a/41068740/4488252 –

+0

Vielen Dank, aber es hilft nicht - es ist nicht beschrieben Problem, das ich habe - Aufruf verwenden ObjcC in Swift, die einen Swift als Klassenvariable verwendet – David

Antwort

0

Sie haben. eine Vorwärts-Deklaration Ihrer Swift Klasse

In Keypad.h#import "MyApp-Swift.h" entfernen und fügen Sie wie folgt vor:

... 
@class SwiftViewController; 
@interface Keypad : UIViewController { 
... 

Dies sollte es Keytab.h Referenzen tun Annahme SwiftViewController nur durch Zeiger und Ihre Überbrückung Header korrekt sonst importiert.

Siehe Abschnitt Referenzieren einer Swift-Klasse oder eines Protokolls in einem Objective-C-Header in https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html.