Middle
Hoe maak je een zwakke verwijzing naar een variabele van het protocoltype in Swift?
sobes.tech AI
Antwoord van AI
Het is noodzakelijk om het sleutelwoord weak te gebruiken vóór het declareren van een variabele van het type protocol. Het protocol moet zodanig worden gedeclareerd dat het alleen op klassen kan worden toegepast: door te erven van AnyObject, of door het sleutelwoord class te gebruiken.
Voorbeeld met erven van AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Voorbeeld met het sleutelwoord class:
protocol AnotherDelegate: class { // Variatie tot Swift 4.1
func doSomethingElse()
}
// In moderne versies van Swift (>= 4.1) is het voldoende om te erven van `AnyObject`
Het gebruik van weak voorkomt cyclische sterke verwijzingen, bijvoorbeeld bij delegatie, waar een eigenaar-object verwijst naar de delegate, en deze op zijn beurt terugverwijst naar de eigenaar (of een vergelijkbare structuur). Een zwakke verwijzing verhoogt de referentieteller van het object niet.