在Swift 4.1中使用NSProxy

时间:2018-04-18 15:20:13

标签: swift proxy-pattern nsproxy

如何在Swift中创建NSProxy子类?

尝试添加任何init方法失败,但出现错误: "不能在初始化程序之外调用超级初始化程序"或 "在从初始化程序返回之前,不会在所有路径上调用超级初始化"

error1 error2

使用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()
  }
}

1 个答案:

答案 0 :(得分:0)

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

有关Wikipedia抽象类的文档说:

  

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

Calling super.init()对于抽象类是错误的。 在第二类中,您不是为抽象类调用super.init(),而是为具体类WorkingProxyBaseClass。在目标c中,您尚未调用[super init],因此代码可以正常工作。