从Objective C中的Swift类inheritance
我在Xcode 7项目中成功地混合和匹配Obj-C和Swift。 但是,我似乎无法弄清楚在Objective C类中如何从Swift类inheritance(是的,我知道将Swift类声明为@objc
以获得可见性)。 在这种情况下,所需的Swift超类MySwiftViewController
是UIViewController
的子类。 现在,在Obj-C中,我直接从UIViewController
inheritance并且无法访问我在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
但是,据我所知,它不受支持,因此你可能会遇到任何类型的错误。 所以它不是行动的指南,更像是好奇的事情要知道。