Je voudrais stocker un tableau de références faibles en Swift. Le tableau lui-même ne devrait pas être une référence faible - ses éléments doivent être. Je pense que l'Objective-C NSPointerArray
offre non typesafe version de ce.
Réponses
Trop de publicités?Vous pouvez utiliser le NSHashTable avec weakObjectsHashTable. (NSHashTable.weakObjectsHashTable())
NSHashTable De Référence De Classe
Disponible dans OS X v10.5 et versions ultérieures.
Disponible sous iOS 6.0 et versions ultérieures.
Ce n'est pas ma solution. Je l'ai trouvé sur les Forums des Développeurs Apple.
@GoZoner a une bonne réponse, mais il se bloque, la Swift compilateur.
Voici une version de la faiblesse de l'-conteneur de l'objet ne tombe pas en panne le courant publié compilateur.
struct WeakContainer<T where T: AnyObject> {
weak var _value : T?
init (value: T) {
_value = value
}
func get() -> T? {
return _value
}
}
Vous pouvez ensuite créer un tableau de ces conteneurs:
let myArray: Array<WeakContainer<MyClass>> = [myObject1, myObject2]
Comment au sujet de style fonctionnel wrapper?
func linkWeakly <T where T: AnyObject> (target:T) -> ()->T? {
weak var value = target as T?
return {
return value
}
}
Appelez simplement retourné la fermeture de vérifier la cible est toujours en vie.
let linkage = linkWeakly(obj1)
let isAlive = linkage() != nil
let theValue = linkage()!