【发布时间】:2018-09-27 15:28:52
【问题描述】:
我有以下使用 Objective-C 枚举的 Objective-C 类:
MyClass.h:
typedef NS_ENUM(NSInteger, MyEnum) {
MyEnumCase1
};
@interface MyClass : NSObject
-(void)method:(MyEnum)param;
@end
MyClass.m:
@implementation MyClass
-(void)method:(MyEnum)param {}
@end
我可以在 Swift 中继承 MyClass 并覆盖这样的方法:
SubClass.swift
class SubClass: MyClass {
override func method(_ param: MyEnum) {}
}
但如果我在 Swift 而不是在 Objective-C 中定义枚举,则覆盖该方法会失败:
MyClass.h:
// Forward declare the enum in Objective-C
typedef NS_ENUM(NSInteger, MyEnum);
@interface MyClass : NSObject
-(void)method:(MyEnum)param;
@end
SubClass.swift:
@objc enum MyEnum: NSInteger {
case case1
}
class SubClass: MyClass {
override func method(_ param: MyEnum) {} // Error
}
在这种情况下,重写方法失败并出现错误
方法不会覆盖其超类中的任何方法
枚举本身在 Swift 中工作,我可以在 SubClass 中添加以下方法,并且它可以编译:
func useEnum() {
let x = MyEnum.case1
}
为什么覆盖失败?
【问题讨论】:
标签: objective-c swift enums