如何在.swift

时间:2017-03-11 13:54:08

标签: ios objective-c swift

我有一个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
    }

}

1 个答案:

答案 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()
}

现在您可以复制函数定义并使用它来定义 子类中的重写方法。