Sobes.tech
Junior — Middle

V čom sa líši spôsob prenosu dát pomocou uzavretého bloku (Closure) od prenosu cez delegáta (Delegate)?

sobes.tech AI

Odpoveď od AI

Uzavretý blok (Closure) a delegát (Delegate) sú rôzne mechanizmy prenosu a spracovania dát/logiky.

  • Closure — je funkcia, ktorá zachytáva a uchováva kontext (premenné) z okolia. Umožňuje prenášať logiku spolu so stavom.

  • Delegate — je vzor, pri ktorom jeden objekt prenáša zodpovednosť na iný prostredníctvom vopred definovaného rozhrania alebo protokolu. V iOS sú delegáti zvyčajne implementovaní prostredníctvom protokolov a umožňujú objektu informovať iný o udalostiach.

Rozdiely:

  • Closure — je funkcia s uzáverom, flexibilnejšia a kompaktnejšia, často používaná pre spätné volania.
  • Delegate — je objekt s definovaným rozhraním, ktorý implementuje metódy, zabezpečujúc štruktúrovanejšiu interakciu.

Príklad closure v Swift:

let closure = { (value: Int) in
    print("Hodnota je \(value)")
}
closure(10)

Príklad delegáta:

protocol MyDelegate: AnyObject {
    func didUpdate(value: Int)
}

class Worker {
    weak var delegate: MyDelegate?
    func doWork() {
        // ...
        delegate?.didUpdate(value: 42)
    }
}