[英]How to override an abstract class level method of an objective-c class in a swift class?
我有一个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
}
但它给了我一个错误
方法不会覆盖超类中的任何方法
首先修复方法中的语法错误并使其看起来像
+(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
并将swift代码更新为soupDict: [NSObject : AnyObject]
或soupDict: [NSObject : AnyObject]?
分别。 如果NSDictionary为nil,则使用guard let
进行可选检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.