如何在swift类中覆盖objective-c类的抽象类级方法?

时间:2016-08-07 10:18:03

标签: ios objective-c swift

我有一个Objective-c类级别方法如下

+(SObjectData *)createSObjectData:(NSDictionary *)soupDict{
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:[NSString stringWithFormat:@"You Must override %@ in a sub class",NSStringFromSelector(_cmd)],userInfo:nil]
}

我想在 swift

的子类中覆盖此方法

我尝试了以下

override class func createSObjectData(soupDict:NSDictionary)->SObjectData
{
//some code
}

但是它给了我一个错误

  

方法不会覆盖超类

中的任何方法

1 个答案:

答案 0 :(得分:2)

首先修复方法中的语法错误并使其看起来像

+(SObjectData *)createSObjectData:(NSDictionary *)soupDict
{
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:[NSString stringWithFormat:@"You Must override %@ in a sub class",NSStringFromSelector(_cmd)]userInfo:nil];
}

在你的BaseClass.h中

+(SObjectData *)createSObjectData:(NSDictionary *)soupDict;

在你的BaseClass.m

+(SObjectData *)createSObjectData:(NSDictionary *)soupDict
{
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:[NSString stringWithFormat:@"You Must override %@ in a sub class",NSStringFromSelector(_cmd)]userInfo:nil];
}

在你的快速课程中

override class func createSObjectData(soupDict: [NSObject : AnyObject]!) -> SObjectData
{
    return SObjectData();
}

<强>更新

如果您确定字典永远不会使用NSDictionary * _Nonnull,那么如果NSDictionary无法使用NSDictionary * _Nullable并将快速代码更新为soupDict: [NSObject : AnyObject]soupDict: [NSObject : AnyObject]?分别。如果NSDictionary为nil,则使用guard let进行可选检查