Per dimostrare questo problema, ho realizzato un progetto Cocoa alla vaniglia. Ecco l'AppDelegate.swift
:La variabile debole debole di Swift non verrà compilata
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
weak lazy var isGood : NSNumber? = {
return true
}()
func doSomething() {
let result = isGood!
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
Xcode dà questo:
unkown :0: error: cannot convert return expression of type 'NSNumber?' (aka 'Optional') to return type 'NSNumber?'
unkown :0: cannot assign value of type 'NSNumber?' to type 'NSNumber??'
unkown :0: cannot assign value of type 'NSNumber?' to type 'NSNumber??'
Nel mio progetto attuale, è un altro oggetto di MyCustomClass
(invece di NSNumber). L'errore è lo stesso eccetto il tipo è MyCustomClass
.
Se rimuovo weak
o lazy
dalla dichiarazione, è tutto a posto. Ma volevo salvare il conteggio dei riferimenti da +1, dal momento che il MyCustomClass
è un NSViewController
che è sicuro di essere sempre lì.
Qualche idea su come utilizzare la variabile debole pigra?
Fantastico! Questo e 'esattamente quello che stavo cercando. Ma ho iniziato a pensare se sono troppo ingegnerizzato. Uno che conserva non farà male, giusto? L'unico vantaggio qui può essere che previene il possibile futuro ciclo di riferimento. – LShi