Middle
Kā izveidot vājinātu atsauci uz protokola tipa mainīgo Swift?
sobes.tech AI
Atbilde no AI
Ir nepieciešams izmantot atslēgas vārdu weak pirms protokola tipa mainīgā deklarēšanas. Protokols jādeklarē tā, lai tas būtu piemērojams tikai klasēm: vai nu manto no AnyObject, vai izmanto atslēgas vārdu class.
Piemērs ar mantošanu no AnyObject:
protocol MyDelegate: AnyObject {
func doSomething()
}
class MyClass {
weak var delegate: MyDelegate?
}
Piemērs ar atslēgas vārdu class:
protocol AnotherDelegate: class { // Variants līdz Swift 4.1
func doSomethingElse()
}
// Modernās Swift versijās (>= 4.1) pietiek ar mantošanu no `AnyObject`
weak izmantošana novērš cikliskas stipras atsauces, piemēram, delegēšanas gadījumā, kad īpašnieka objekts atsaucas uz deleģentu, un tas atgriežas atsaucē uz īpašnieku (vai līdzīgu struktūru). Vāja atsauce nepalielina objekta atsauču skaitītāju.