Sobes.tech
Junior — Middle

Ako ovplyvňuje použitie premennej v uzávierke a jej následné volanie po zmene jej hodnoty konečnú hodnotu premennej counter?

sobes.tech AI

Odpoveď od AI

Ak sa premenná counter používa vo vnútri uzávery, správanie závisí od toho, ako presne uzávera zachytáva túto premennú:

  • V Swiftu uzávery zachytávajú premenné odkazom, ak sú deklarované ako var. To znamená, že ak sa po vytvorení uzávery hodnota counter zmení, pri volaní uzávery sa použije aktuálna hodnota.

Príklad:

var counter = 0
let closure = {
    print(counter)
}
counter = 5
closure() // Vytlačí 5
  • Ak bola premenná zachytená ako konštanta (napríklad cez let vo vnútri uzávery alebo ak uzávera explicitne kopíruje hodnotu), potom zmena mimo uzávery nebude mať vplyv na hodnotu vo vnútri.

Teda pri použití premennej vo vnútri uzávery a neskoršej zmene jej hodnoty bude pri volaní odrážať aktuálny stav premennej, ak je zachytená odkazom.