2014-06-13 8 views
45

Mam podklasę UIViewController napisaną w Swift nazwie "BaseViewController". Mam teraz "stary" kontroler widoku o nazwie "ViewController1" napisany w Objective-C, który chcę dziedziczyć po "BaseViewController". Po innych poradach zaimportowałem plik nagłówkowy "Project-Swift.h".miksowanie obiektywu-c i szybki przy podklasowaniu

Mój problem pojawia się, gdy instacji jak ten

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

@interface ViewController1 : BaseViewController 
@end 

błędu jest:

Nie można podklasy klasy z objc_subclassing ograniczonego atrybut

i wydaje na @interface linii ... .

+0

pisanie nowej superklasę do istniejącej klasy wydaje się trochę dziwne dla mnie ... – nhgrif

+0

Myślę pytanie OP jest po prostu o tym, jak mieć klasy Objective-C rozszerzyć Swift klasy, co nie jest możliwe –

Odpowiedz

80
+3

Dzięki ! Tęskniłem za tym - nie ma więc sposobu na powolną migrację starych i nowych projektów do Swift bez całkowitego przepisania :). – apotry

+2

Możesz podklasować klasę Objective-C w Swift. Zacznij od dołu i idź w górę. – nhgrif

+1

Nie trzeba jej przepisywać. Możesz użyć obiektywnej klasy w trybie szybkim, ponieważ używa ona celu c mostowania nagłówka –

9

Nie można podklasować klasy Swift w Objective-C. cf. pod koniec this section of the docs:

Należy jednak pamiętać, że nie można podklasować klasy Swift w Objective-C.

0

Jest to błąd kompilacji, więc u nie może podklasy szybkiego klasę w ObjC.

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 
Powiązane problemy