如何在init函数中实例化一个依赖于self的对象?

回答

我知道在调用之前需要定义所有属性super.init()但是,如果属性的初始化依赖于该self怎么办?就我而言,我需要初始化一个具有委托的对象,该对象需要设置为self做这个的最好方式是什么?

class MyClass : NSObject {
  var centralManager : CBCentralManager
  override init() {
    super.init()
    centralManager = CBCentralManager(delegate: self, queue: nil)
  }
}

这是错误的,因为centralManager未在之前初始化super.init但是我也不能更改顺序,因为那样的话我会使用selfbefore super.init

卢卡·安格莱蒂(Luca Angeletti)

问题

假设CBCentralManager定义如下

protocol CBCentralManagerDelegate { }

class CBCentralManager {
    init(delegate: CBCentralManagerDelegate, queue: Any?) {
    }
}

解决方案

这是定义班级的方式

class MyClass: CBCentralManagerDelegate {
    lazy var centralManager: CBCentralManager = {
        [unowned self] in CBCentralManager(delegate: self, queue: nil)
        }()
}

它是如何工作的?

如您所见,我正在使用lazy属性填充该centralManager属性。

lazy属性具有关联的闭包,该闭包在第一次读取lazy属性时执行。

由于只有在初始化当前对象后才能读取lazy属性,因此一切正常。

NSObject在哪里?

正如你所看到我删除的继承MyClassNSObject除非您有很好的理由可以很好地继承NSObject...否则,请不要这样做:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该如何在__init__中定义一个依赖于协程的变量?

如何在依赖于两个变量的函数中仅对一个变量使用“ for”循环?

如何在RxJS中创建依赖于另一个Observable的Observable

在实例/对象中运行一个方法,该方法的名称依赖于来自另一个实例方法的输入

在cmake中,如何使一个目标依赖于另一个目标?

如何在依赖于另一个方法值的构造函数中初始化处于状态的方法

构造对象,其属性之一依赖于另一个。在C ++中

如何在r的生存包中的coxph模型中创建一个依赖于时间的协变量时间?

如何在 Oracle 12c 中获取依赖于另一个变量的变量值?

Python:如何从依赖于模块的另一个文件中正确导入函数

如何设计一个接受所有域但依赖于某些状态的局部函数?

如何有一个依赖于类的模板参数的成员函数实现?

如何单独并行运行一个依赖于另一个大函数的函数

如何使参数的默认值依赖于另一个参数(在Python中)?

如何创建一个依赖于另一个变量的任意先前值的虚拟对象?

测试一个对象是否依赖于另一个对象

如何测试依赖于另一个服务(又依赖于Http服务)的服务/组件?

在Swift中从UIViewController继承的类中是否可以初始化依赖于另一个变量?

Dagger:为什么 dagger 需要一个不依赖于另一个对象的对象的 @inject 构造函数

如何使一个Maven模块依赖于另一个?

在依赖于 instanceof (JEST) 的函数中测试实例

当一个依赖于另一数据时处理可观察对象

如何在.NET Core中更改/创建依赖于域的自定义FileProvider(即,一个提供多种站点呈现逻辑的Web应用程序)

如何在本身依赖于另一个条件的条件下使用std :: enable_if?

如何在依赖于另一个未合并功能分支的功能分支上工作?

在依赖于前一行值的DataFrame上应用一个函数

MYSQL:如何自动删除表中依赖于另一个表中的记录的行

如何返回依赖于两个函数的函数?

SBT-如何使InputTask依赖于一个任务而最终依赖于另一个任务