Swift gives “self used before all stored procedures are initialized” error when building child nodes

一曲冷凌霜 提交于 2019-12-11 03:17:29

问题


In XCode 6.2, I have a Swift project where a main-object ("Backbone") creates sub-objects with pointers back to Backbone:

class Backbone
{
    let logManager: QCLogManager!
    let cloudJobManager: CloudJobManager!
    ...

    init() {
        logManager = QCLogManager(backbone: self)
        cloudJobManager = CloudJobManager(backbone: self)
        ...
    }

It works very nicely. However, in XCode 6.3 each line in init() now gives the error:

'self' used before all stored properties are initialized.

That seems a rather unhelpful compiler restriction. Why did it change? How should I now be doing it?


回答1:


let logManager: QCLogManager!
let cloudJobManager: CloudJobManager!

if let is not necessary, change to var

var logManager: QCLogManager!
var cloudJobManager: CloudJobManager!



回答2:


You might need to create a property of type Backbone in both QCLogManager and CloudJobManager and set that property after initialization of all store properties of BackBone class.

class Backbone
{
    let logManager: QCLogManager!
    let cloudJobManager: CloudJobManager!
    ...

    init() {
        logManager = QCLogManager()
        cloudJobManager = CloudJobManager()
        ...
        logManager.backBone = self
        cloudJobManager.backBone = self
    }


来源:https://stackoverflow.com/questions/29761219/swift-gives-self-used-before-all-stored-procedures-are-initialized-error-when

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!