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.