Sobes.tech
Middle

Swiftте протоколдун түрүндөгү өзгөрмөгө алсыз шилтемени кантип түзсө болот?

sobes.tech AI

AIден жооп

Протоколдун өзгөрмөсүн билдирүүдөн мурда weak ачкыч сөзүн колдонуу керек. Протокол гана класстарга колдонулушу үчүн аны AnyObject менен мурас кылуу же class ачкыч сөзүн колдонуу менен аныкталышы керек.

AnyObject менен мурас кылуу мисалы:

protocol MyDelegate: AnyObject {
    func doSomething()
}

class MyClass {
    weak var delegate: MyDelegate?
}

class ачкыч сөзү менен мисал:

protocol AnotherDelegate: class { // Swift 4.1 чейин
    func doSomethingElse()
}

// Заманауи Swift версияларында (>= 4.1) жетиштүү `AnyObject` мурас кылуу

weak колдонуу күчтүү циклик шилтемелердин алдын алат, мисалы делегаттоо учурунда, ээс объект делегатка шилтеме кылат, ал эми делегат кайра ээске (же окшош структурага) шилтеме кылат. Зыяндуу шилтеме объекттин шилтеме санагычын көбөйтпөйт.