Dove definire i riferimenti acquisiti per le chiusure annidate in Swift?Posizionamento corretto dell'elenco di cattura nelle chiusure annidate in swift
prendere questo codice come un esempio:
import Foundation
class ExampleDataSource {
var content: Any?
func loadContent() {
ContentLoader.loadContentFromSource() { [weak self] loadedContent in
// completion handler called on background thread
dispatch_async(dispatch_get_main_queue()) { [weak self] in
self?.content = loadedContent
}
}
}
}
class ContentLoader {
class func loadContentFromSource(completion: (loadedContent: Any?) -> Void) {
/*
Load content from web asynchronously,
and call completion handler on background thread.
*/
}
}
In questo esempio, [weak self]
viene utilizzato in entrambe le chiusure finali, tuttavia il compilatore è perfettamente felice se tralascio [weak self]
da uno dei due chiusure finali.
In modo che mi lascia 3 opzioni per definire la mia lista di cattura:
- definiscono cattura su ogni chiusura nidificato che porta al riferimento
- definiscono catturate solo il primo di chiusura.
- definisce le acquisizioni solo sulla chiusura più annidata che utilizza effettivamente il riferimento.
La mia domanda è:
Se so che il mio
ExampleDataSource
potrebbe esserenil
ad un certo punto, qual è l'opzione migliore per andare con?