问题
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