4

NSProxy如何在 Swift中创建子类?

尝试添加任何init方法都失败并出现错误:“无法在初始化程序之外调用超级初始化”,或“在从初始化程序返回之前未在所有路径上调用超级初始化”

错误1 错误2

使用 Objective-C 子类作为基类是可行的,但感觉更像是一种 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()
  }
}
4

1 回答 1

1

NSProxy 是一个抽象类。关于 NSProxy 的 Apple 文档说:“一个抽象超类,为充当其他对象或尚不存在的对象的替代对象的对象定义 API”。

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

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

Calling super.init()因为抽象类是错误的。在第二类中,您不是在调用super.init()抽象类,而是在调用WorkingProxyBaseClass具体类。在 Objective c 中,您没有调用,[super init]因此代码正在运行。

于 2019-07-16T06:06:38.890 回答