[Swift] - Capturing Values by Closures (κ°μ μΊ‘μ²νλ ν΄λ‘μ )
ν΄λ‘μ λ μ€μ½ν λ°μ κ°μ μ κ·Όν λ κ°μ μΊ‘μ²ν©λλ€.
ν΄λ‘μ μλ Named clousure κ³Ό Unnamed closure κ° μμ§λ§, μ¬κΈ°μλ Unnamed closure λ₯Ό κ°λ¦¬ν΅λλ€.
μ°Έκ³ λ‘ Named clousure μ€ global function λ κ°μ μΊ‘μ²νμ§ μμ΅λλ€.
κ°μ μΊ‘μ²νλ€λ μλ―Έλ, κ°μ μ°Έμ‘°λ₯Ό νλνλ€λ λ»μ λλ€.
λ°λΌμ μ°Έμ‘°λ κ°μ ν΄λ‘μ μ€μ½ν λ΄λΆμμ λ³κ²½λλ©΄, μ€μ κ°λ λ³κ²½λ©λλ€.
var count: Int = 0
print(count) // "0"
var closure = {
count += 1 // μ€μ½ν μΈλΆμ κ°(count)μ μ κ·ΌνμμΌλ―λ‘, μ°Έμ‘°λ₯Ό νλνμμ΅λλ€.
}
print(count) // "0" :::: ν΄λ‘μ λ₯Ό μ μΈλ§ νμλΏ, νΈμΆνμ§λ μμμ΅λλ€.
closure()
print(count) // "1"
λμ κ°μ΄ κ° νμ μΈμ§, μ°Έμ‘° νμ μΈμ§λ μκ΄μμ΅λλ€.
λ€λ§ μ°Έμ‘° νμ μ μ°Έμ‘°λ₯Ό νλνλ€λ©΄, reference count λ₯Ό μ¦κ°μν€κΈ° λλ¬Έμ, Strong Reference Cycle μ΄ λ°μν μ μμ΅λλ€.
κ·Έλ κ² λλ©΄ ARC μ μν΄ λ©λͺ¨λ¦¬μμ μ λλ‘ ν λΉν΄μ (deallocated) λμ§ μμ΅λλ€.
μ΄κ²μ ν΄λ‘μ μΊ‘μ² λ¦¬μ€νΈλ₯Ό ν΅ν΄ κ΄λ¦¬ν΄μΌν©λλ€.
π‘ μΆκ° μμ©
class myClass {
var handler: () -> ()
}
handler μμ±μ λ€λ₯Έ ν΄λμ€μμ μ λ¬ λ°μ ν΄λ‘μ λ‘ μ΄κΈ°ννλ©΄, κ·Έ ν΄λ‘μ λ΄λΆμ μΊ‘μ²λ μ°Έμ‘° (λ€λ₯Έ ν΄λμ€μ μ°Έμ‘°) λ μ λ¬λ°κ² λλ€.
μ΄ ν¨μμ§ν₯ νλ‘κ·Έλλ° κ°λ μ μ΄μ©ν ν΅μ¬ μμ΄λμ΄λ₯Ό μμ©ν΄μ reactive-programming μ ꡬνν μ μλ€.
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.