Sobes.tech
Middle+

Чӣ гуна метавон пайванди заиф ба майдоне, ки протокол аст, сохт?

sobes.tech AI

Ҷавоб аз AI

Мумкин аст, ки калидвожаҳоро weak ё unowned пеш аз эълони майдони навъи протокол истифода баред.

protocol MyProtocol: AnyObject { // Протокол бояд маҳдуд ба синфҳо бошад
    func doSomething()
}

class MyClass {
    weak var delegate: MyProtocol? // Ҳамсояи заиф ба майдони навъи MyProtocol
    unowned var helper: MyProtocol // Ҳамсояи ғайриҳуқуқӣ ба майдони навъи MyProtocol (агар шумо боварӣ доред, ки объект ҳамеша вуҷуд дорад)
}

Муҳим аст, ки протокол бояд маҳдуд ба синфҳо бошад (: AnyObject), то ки истифодаи ҳамсояи заиф ё ғайриҳуқуқӣ имконпазир шавад. Ин кафолат медиҳад, ки навъи, ки протоколро иҷро мекунад, навъи истинод аст, на навъи арзиш.

Барои майдони навъи протокол, weak истифода мешавад, вақте ки объект, ки ба он ишора мекунад, метавонад пеш аз объекте, ки ин ишораро дорад, озод карда шавад. Агар объект ишорашуда озод карда шавад, майдон автоматӣ nil мешавад.

unowned истифода мешавад, вақте ки шумо боварӣ доред, ки объект, ки ба он ишора мекунад, ҳамеша дорои ҳамин ё давомнокии дарозтар дорад, нисбат ба объекте, ки ин ишораро дорад. Истифодаи unowned танҳо дар он суратҳо бехатар аст, ки шумо бидуни цикли ишораҳо ва бо боварӣ, ки объект ҳамеша дуруст аст, истифода баред. Агар объект озод карда шавад ва шумо кӯшиш кунед, ки ба он тавассути ишораи unowned дастрасӣ пайдо кунед, коди кати мешавад.

Дар бисёр ҳолатҳо, weak барои намояндагон ва дигар намунаҳои монанд истифода мешавад.