Junior — Middle
Kan je een zwakke verwijzing maken naar een eigenschap die een protocol implementeert?
sobes.tech AI
Antwoord van AI
In Swift is het niet mogelijk om een zwakke (weak) verwijzing te maken naar een eigenschap die een protocol implementeert, tenzij dat protocol beperkt is tot klassen (class-only protocol). Dit komt doordat zwakke verwijzingen alleen toegepast kunnen worden op referentietypen (klassen), terwijl protocollen door zowel klassen als structuren of enumeraties geïmplementeerd kunnen worden.
Om een zwakke verwijzing te gebruiken naar een eigenschap met een protocoltype, moet het protocol beperkt worden door er erft van AnyObject, bijvoorbeeld:
protocol MyProtocol: AnyObject {
func doSomething()
}
class MyClass: MyProtocol {
func doSomething() {
print("Iets doen")
}
}
class AnotherClass {
weak var delegate: MyProtocol?
}
Als het protocol niet beperkt is tot AnyObject, kan er geen zwakke verwijzing gemaakt worden, en moeten sterke verwijzingen of andere geheugenbeheersmechanismen gebruikt worden.