【问题标题】:Use NSProxy in Swift 4.1在 Swift 4.1 中使用 NSProxy
【发布时间】:2018-09-28 21:57:50
【问题描述】:

如何在 Swift 中创建NSProxy 子类?

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

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

【问题讨论】:

标签: swift proxy-pattern nsproxy


【解决方案1】:

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

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

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

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

【讨论】:

  • 问题仍未解决。如何在 Swift 中实例化 NSProxy 子类?
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多