我有一个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
}
但是它给了我一个错误
方法不会覆盖超类
中的任何方法
答案 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
进行可选检查