Sobes.tech
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.