在斯威夫特3去除dispatch_once功能訪問的「自我」和migration guide建議使用初始化關閉:在初始化關閉
讓myGlobal = {...全球包含在呼叫初始化一個封閉...}( )
_ = myGlobal //使用myGlobal將只在第一次使用時調用初始化代碼。
我想從訪問初始化閉包內的「自我」的實例變量,像這樣:
class SomeClass {
var other = SomeOtherClass()
let initialize:() = {
// self.other - this doesn't work, complains about unresolved identifier 'self'
// how to access self.other here?
}()
func doSomething() {
// initialize will only be called once
initialize
}
}
爲什麼是「自我」不是在封閉訪問,怎樣才能使之成爲?
使用dispatch_once與實例屬性,以確保「每個實例一次」初始化是*永遠是錯的,*參見例如這樣的回答http://stackoverflow.com/a/19845164/1187415從蘋果電腦的工程師。 –
那麼Swift 3中的正確方法是確保實例初始化代碼只運行一次,並且能夠設置實例變量?在這種情況下,我不能使用init()的變體,因爲類(NSViewController)只需運行初始化代碼一次,但是在'NSViewController'生命週期(即'viewDidAppear')的特定點之後。 @vadian提供的答案在你看來是否正確(它似乎正常工作)? – danielv
也比較http://stackoverflow.com/questions/39048008/call-a-method-once-only-for-the-lifetime-of-the-object-in-swift。 –