Ich vermische erfolgreich Obj-C und Swift in einem Xcode 7-Projekt. Allerdings kann ich nicht herausfinden, wie ich in einer Objective-C-Klasse von einer Swift-Klasse erben soll (und ja, ich weiß, dass ich die Swift-Klasse als @objc
für Sichtbarkeit deklariere). In diesem Fall ist die gewünschte Swift-Oberklasse MySwiftViewController
eine Unterklasse von UIViewController
. Momentan erben wir in Obj-C direkt von UIViewController
und haben keinen Zugriff auf die Funktionen, die ich in MySwiftViewController
hinzugefügt habe.
Folgendes verstehe ich:
- Um zu deklarieren, dass eine Obj-C-Klasse von etwas erbt, das sich nach dem ':' in der .h-Datei befinden muss:
%Vor% - Um Swift-Klassen sichtbar zu machen, ist das #import
ed:
Sie können jedoch den automatisch generierten Bridging-Header von Swift nicht in die Obj-C .h -Datei importieren. Sie können auch keine undurchsichtige Oberklasse mit @class
weiterleiten. Also, ist das möglich und wie?
Leider ist es nicht möglich, eine Swift-Klasse in Objective-C zu unterklassifizieren. Direkt aus der Dokumentation:
Sie können in Objective-C keine Swift-Klasse ableiten.
Siehe Apples Anleitung zur Interoperabilität für weitere Informationen darüber, worauf Sie mit Objective-C zugreifen können und was nicht.
Wie für Xcode 8.0 und früher gibt es eine Dirty-Hacky-Lösung, die wahrscheinlich in der Zukunft behoben wird.
Wenn Sie eine Unterklasse von swift-Datei erstellen möchten, können Sie objc_subclassing_restricted
attribute hinzufügen. Sie können es als Makro für die Bequemlichkeit machen.
Code:
Schnelle Klasse.
%Vor%Objc-Klasse:
%Vor%Aber wie ich verstehe, wird es nicht unterstützt, und Sie haben vielleicht irgendwelche Fehler. Es ist also kein Leitfaden zum Handeln und eher wie ein seltsames Wissen.
Tags und Links objective-c ios inheritance swift