Middle
Kaip sukurti silpną nuorodą į protokolo tipo kintamąjį Swift?
sobes.tech AI
Atsakymas iš AI
Būtina naudoti raktinį žodį weak prieš deklaruojant kintamąjį, kurio tipas yra protokolas. Protokolas turi būti deklaruotas taip, kad jis galėtų būti taikomas tik klasėms: paveldint iš AnyObject arba naudojant raktinį žodį class.
Pavyzdys su paveldėjimu iš AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Pavyzdys su raktiniu žodžiu class:
protocol AnotherDelegate: class { // Variantas iki Swift 4.1
func doSomethingElse()
}
// Moderniose Swift versijose (>= 4.1) pakanka paveldėti iš `AnyObject`
weak naudojimas užkerta kelią cikliniams stipriems nuorodoms, pavyzdžiui, deleguojant, kai savininkas objektas nurodo į delegatą, o tas vėl nurodo atgal į savininką (arba panašią struktūrą). Silpna nuoroda nepadidina objekto nuorodų skaitiklio.