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 аз цикли пайвастшавии қавӣ пешгирӣ мекунад, масалан дар делегатсия, ки дар он объекти соҳиби ба делегат ишора мекунад, ва делегат баргашта ба соҳиби (ё сохтори монанд) ишора мекунад. Ишораи заъиф ба ҳисобкунаки ишораҳо ба объект зиёд намекунад.