Sobes.tech
Middle

Hogyan lehet gyenge hivatkozást létrehozni egy protokoll típusú változóra Swiftben?

sobes.tech MI

Válasz az MI-től

A weak kulcsszót a protokoll típusú változó deklarálása előtt kell használni. A protokollt olyan módon kell deklarálni, hogy csak osztályokra alkalmazható legyen: vagy öröklődik az AnyObject-től, vagy a class kulcsszót használja.

Példa az AnyObject öröklésével:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

Példa a class kulcsszóval:

protocol AnotherDelegate: class { // A Swift 4.1-ig
    func doSomethingElse()
}

// A modern Swift verziókban (>= 4.1) elegendő az `AnyObject`-től öröklődni

A weak használata megakadályozza a ciklikus erős hivatkozásokat, például delegálás esetén, ahol egy tulajdonos objektum hivatkozik a delegátra, és az visszautal a tulajdonosra (vagy hasonló szerkezetre). A gyenge hivatkozás nem növeli az objektum referencia számlálóját.