Middle
Kuidas luua Swiftis nõrk viide protokolli tüüpi muutujale?
sobes.tech AI
Vastus AI-lt
Protokoli tüüpi muutujat tuleks deklareerida võtmesõnaga weak. Protokoal peaks olema deklareeritud nii, et seda saaks rakendada ainult klassidele: kas pärides AnyObject-ist või kasutades võtmesõna class.
Näide pärimisest AnyObject-ist:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Näide võtmesõnaga class:
protocol AnotherDelegate: class { // Variatsioon kuni Swift 4.1
func doSomethingElse()
}
// Tänapäevastes Swift versioonides (>= 4.1) piisab pärimisest `AnyObject`-ist
weak-i kasutamine takistab tsüklilisi tugevaid viiteid, näiteks delegeerimisel, kus omanikobjekt viitab delegeerijale, ja delegeerija omakorda viitab tagasi omanikule (või sarnasele struktuurile). Nõrk viide ei suurenda objekti viidete loendurit.