我有一个OC UIViewController
类别,它删除了UIViewController
+(BOOL)hasStoryBoard;
我还将此类别导入xxx-Bridging-Header.h
文件
我的swift类CustomVC
是继承的UIViewController。我希望覆盖+(BOOL)hasStoryBoard
以提供BOOL类型的值。此方法将在其他类中调用以确定CustomVC
新实例的某些功能。
但在我的CustomVC.swift中,我找不到这样的方法:
override class func hasStoryBoard()->bool{}
我必须覆盖此方法才能提供YES
,或者给它的子类NO
,等等......
我搜索了这个网站并找到了这个Swift: How to call a category or class method from Objective-C。在这个讨论中,解释并告诉你如何调用方法,而不是如何覆盖方法。
你能找到覆盖oc类别的类方法的解决方案吗?或者在我的情况下给出一个解决方法。
我的所有代码都是:
@interface UIViewController (StoryBoard)
+(BOOL)hasStoryBoard;
-(void)haha;
@end
@implementation UIViewController (StoryBoard)
static BOOL hasStoryboard = NO;//默认没有
+(BOOL)hasStoryBoard{
return hasStoryboard;
}
-(void)haha{}
@end
class CustomVC: UIViewController {
//this override is correct,have syntax input prompt
override func haha() {
}
//this override is incorrect ,no syntax input prompt
override func hasStoryBoard()->Bool{
return true
}
}
答案 0 :(得分:0)
+(BOOL)hasStoryBoard;
在Objective-C中定义了一个类方法,但是在你的Swift子类中 您定义实例方法:
override func hasStoryBoard()->Bool{
return true
}
那也必须是一个类方法:
override class func hasStoryBoard()->Bool{
return true
}
提示:如果您在Xcode中打开Objective-C接口(.h)文件 从Xcode菜单中选择“Navigate-> Jump to Generated Interface” 那么你会很清楚地看到Objective-C界面是如何导入的 迅速。在你的情况下:
extension UIViewController {
open class func hasStoryBoard() -> Bool
open func haha()
}
现在您可以复制函数定义并使用它来定义 子类中的重写方法。