NSProxy的界面是
public class NSProxy : NSObjectProtocol {
public class func alloc() -> Self
public class func `class`() -> AnyClass
public func forwardInvocation(invocation: NSInvocation)
public func dealloc()
public func finalize()
public var description: String { get }
public var debugDescription: String { get }
public class func respondsToSelector(aSelector: Selector) -> Bool
}
所以它没有任何初始化器。但是Swift编译器需要从子类的初始化器调用Super.init
。
在从初始化程序
返回之前,不会在所有路径上调用Super.init
class SimpleDecorator: NSProxy {
let phone: Phone
init(phone: Phone) { // compile error with Super.init
self.phone = phone
}
}
我没有把它放在对super的调用中,它不会编译,但是当然因为NSProxy没有init,所以当我调用super.init()时它不会编译。
是否可以在Swift中拥有NSProxy的子类?
答案 0 :(得分:0)
NSProxy是一个抽象类。苹果公司有关NSProxy的文档说:“一个抽象超类,它为充当其他对象或尚不存在的对象的对象的对象定义API。”
有关维基百科抽象类的文档说:
使用支持继承的语言,抽象类或 抽象基类(ABC),是无法实例化的类 因为它要么被标记为抽象,要么只是指定 抽象方法(或虚拟方法)。
为抽象类调用super.init()是错误的。