Swift 2.2和NSProxy。我怎么用呢?

时间:2016-04-07 14:06:54

标签: swift

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的子类?

1 个答案:

答案 0 :(得分:0)

NSProxy是一个抽象类。苹果公司有关NSProxy的文档说:“一个抽象超类,它为充当其他对象或尚不存在的对象的对象的对象定义API。”

有关维基百科抽象类的文档说:

  

使用支持继承的语言,抽象类或   抽象基类(ABC),是无法实例化的类   因为它要么被标记为抽象,要么只是指定   抽象方法(或虚拟方法)。


为抽象类调用super.init()是错误的。