从Objective C中的Swift类inheritance

我在Xcode 7项目中成功地混合和匹配Obj-C和Swift。 但是,我似乎无法弄清楚在Objective C类中如何从Swift类inheritance(是的,我知道将Swift类声明为@objc以获得可见性)。 在这种情况下,所需的Swift超类MySwiftViewControllerUIViewController的子类。 现在,在Obj-C中,我直接从UIViewControllerinheritance并且无法访问我在MySwiftViewController添加的function。

这是我的理解:

– 要将Obj-C类声明为inheritance某些东西,它必须位于’:’之后的.h文件中:

 #import  @interface RootViewController : UIViewController  @end 

– 要使Swift类可见,那就是#import ed:

 #import "MyProject-Swift.h" 

但是,您无法将Swift自动生成的桥接头导入Obj-C .h文件。 您也无法使用@class正向声明不透明的超类。 那么,这可能吗?如何?

不幸的是,不可能在Objective-C中inheritanceSwift类。 直接来自文档:

您不能在Objective-C中inheritanceSwift类。

有关使用Objective-C可以访问和不能访问的内容的更多详细信息,请参阅Apple的互操作性指南 。

对于Xcode 8.0和更早版本,有一个肮脏的hacky解决方案,可能将来会修复。

如果要从swift文件中objc_subclassing_restricted子类,可以添加objc_subclassing_restricted属性。 为方便起见,您可以将其设为宏。 码:

斯威夫特class。

 import Foundation class SwiftClass : NSObject { func say() { print("hi"); } } 

Objc类:

 #import  #import "test-Swift.h" #define SWIFT_SUBCLASS __attribute__((objc_subclassing_restricted)) SWIFT_SUBCLASS @interface ObjcClass : SwiftClass - (instancetype)init; @end @implementation ObjcClass - (void)say { NSLog(@"oops"); } @end 

但是,据我所知,它不受支持,因此你可能会遇到任何类型的错误。 所以它不是行动的指南,更像是好奇的事情要知道。