2014-06-13 15 views
45

Ich habe eine Unterklasse von UIViewController in Swift namens 'BaseViewController' geschrieben. Ich habe jetzt einen 'alten' View-Controller mit dem Namen 'ViewController1', der in Objective-C geschrieben ist und den ich von 'BaseViewController' erben möchte. Nach anderen Ratschlägen habe ich die Header-Datei 'Project-Swift.h' importiert.mixing objective-c und swift beim Unterklassen

tritt mein Problem, wenn wie diese

#import <UIKit/UIKit.h> 
#import "MyProject-Swift.h" 

@interface ViewController1 : BaseViewController 
@end 

Der Fehler Subklassen ist:

keine Klasse mit objc_subclassing-restricted Attribut

und es erscheint auf dem @interface ... line Unterklasse kann .

+0

eine neue übergeordnete Klasse zu einer vorhandenen Klasse Schreiben scheint ein wenig seltsam für mich ... – nhgrif

+0

denke ich, OP Frage nur darum, wie eine Objective-C-Klasse hat eine Swift-Klasse erweitern, was nicht möglich ist –

Antwort

80
+3

Dank ! Verpasste das - also keine Möglichkeit, alte und neue Projekte langsam nach Swift zu migrieren, ohne komplett neu geschrieben zu werden :). – apotry

+2

Sie können eine Objective-C-Klasse in Swift unterklassifizieren. Beginne von unten und arbeite dich hoch. – nhgrif

+1

Keine Notwendigkeit, es neu zu schreiben. Sie können die objektive Klasse in swift verwenden, da sie den objektiven c-Bridging-Header –

9

Sie können in Objective-C keine Swift-Klasse ableiten. vgl. gegen Ende this section of the docs:

Beachten Sie jedoch, dass Sie eine Swift-Klasse in Objective-C nicht unterklassifizieren können.

0

Es ist ein Übersetzungsfehler, so kann U nicht eine schnelle Klasse in objc Unterklasse.

SWIFT_CLASS("_TtC6Swifty14ViewController") 
@interface ViewController : UIViewController 
@end 


# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# else 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# endif 
#endif