Sobes.tech
Middle

Kako napraviti slabu referencu na promenljivu tipa protokol u Swift-u?

sobes.tech АИ

Одговор од АИ

Необходимо je koristiti ključnu riječ weak prije deklaracije varijable tipa protokola. Protokol treba biti deklariran na način da se može primijeniti samo na klase: ili nasljeđivanjem od AnyObject, ili korištenjem ključne riječi class.

Primjer s nasljeđivanjem od AnyObject:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Primjer s ključnom riječi class:

protocol AnotherDelegate: class { // Varijanta do Swift 4.1
    func doSomethingElse()
}

// U modernim verzijama Swifta (>= 4.1) dovoljno je nasljeđivanje od `AnyObject`

Korištenje weak sprječava cikličke jake reference, na primjer kod delegiranja, gdje vlasnički objekt referencira delegata, a delegat zauzvrat referencira vlasnika (ili sličnu strukturu). Slaba referenca ne povećava brojač referenci objekta.