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.