如何在Swift中创建NSProxy
子类?
尝试添加任何init
方法失败,但出现错误:
"不能在初始化程序之外调用超级初始化程序"或
"在从初始化程序返回之前,不会在所有路径上调用超级初始化"
使用Objective-C子类作为Base类可以工作,但感觉更像是一个hack:
// Create a base class to use instead of `NSProxy`
@interface WorkingProxyBaseClass : NSProxy
- (instancetype)init;
@end
@implementation WorkingProxyBaseClass
- (instancetype)init
{
if (self) {
}
return self;
}
@end
// Use the newly created Base class to inherit from in Swift
import Foundation
class TestProxy: WorkingProxyBaseClass {
override init() {
super.init()
}
}
答案 0 :(得分:0)
NSProxy是一个抽象类。苹果公司有关NSProxy的文档说:“一个抽象超类,它为充当其他对象或尚不存在的对象的对象的对象定义API。”
有关Wikipedia抽象类的文档说:
在支持继承的语言中,抽象类或抽象基类(ABC)是无法实例化的类,因为它被标记为抽象或仅指定抽象方法(或虚拟方法)。
Calling super.init()
对于抽象类是错误的。
在第二类中,您不是为抽象类调用super.init()
,而是为具体类WorkingProxyBaseClass
。在目标c中,您尚未调用[super init]
,因此代码可以正常工作。