ν΄λ‘μ λ μ€μννΈμμ κΈ°λ³Έμ μΈ κ°λ μ΄μ§λ§,, μ λ§ μ΄λ €μ΄ κ°λ μ΄κΈ°λ νλ€.
μ΄μ κΈμμ ν΄λ‘μ μ κΈ°μ΄μ μΈ λ΄μ©μ λν΄ λ€λ€λλ°, μ€λμ ν΄λ‘μ λ₯Ό μ¬μ©νλ μ΄μ μ
μ λ² κΈμμλ λ€λ£¨μ§ λͺ»ν κ° μΊ‘μ³μ λν΄ μ 리ν΄λ³΄λ €κ³ νλ€.
π ν΄λ‘μ μ¬μ© λͺ©μ
ν΄λ‘μ λ μ½λλ₯Ό ν¨μ¨μ μΌλ‘ μμ±νλλ°μ ν° λμμ μ€λ€.
ν΄λ‘μ λ₯Ό μ¬μ©νλ λ°μλ μμ£Ό λ€μν λͺ©μ μ΄ μκ² μ§λ§,
κ·Έ μ€μμλ κ°μ₯ μ€μνκ³ , λ§μ΄ μ°μ΄λ λΆλΆμ΄ μλ€.
#1 higher order function
μΈνμΌλ‘ ν¨μλ₯Ό λ°μ μ μλ ν¨μλ₯Ό λ»νλ€. λ°λ‘ κ³ μ°¨ν¨μ,!!
μΈνμΌλ‘ μ€ ν¨μλ₯Ό λ°λ‘ λ§λ€μ΄ μ¬μ©ν μλ μμ§λ§, κ³ μ°¨ν¨μλ₯Ό μ¬μ©νλ κ·Έ μ리μμ λ°λ‘
ν΄λ‘μ λ‘ λ§λ€μ΄ μΈνμ μ€ μλ μλ€. μ΄ λ ν΄λ‘μ λ₯Ό λ§μ΄ μ¬μ©νκ² λλ€.
#2 completion block
μ΄λ ν νμ€ν¬κ° μλ£λμμ λ μννλ λΈλ‘μ λ»νλ€.
ν΄λ‘μ λ λΉλκΈ° μμ μ λ§μ΄ μ¬μ©λλλ°,
λΉλκΈ°μ μΈ μ΄λ ν νμ€ν¬κ° λλκ³ λμ μνν΄μΌ ν λΈλ‘μ ν΄λ‘μ λ‘ μμ±νλ©΄ νΈλ¦¬νλ€.
λ κ°μ§ λͺ¨λ λ무λ무 μ€μνμ§λ§,
μ°λ¦¬λ μ€λ κ° μΊ‘μ³λ₯Ό μμλ³΄κΈ°λ‘ νμΌλ―λ‘ λ λ²μ§Έ μ»΄ν리μ λΈλ‘ νλͺ©μ μ§μ€ν΄λ³΄μ.
μμμ μκΈ°νλ―μ΄ ν΄λ‘μ λ λΉλκΈ° μμ μ λ§μ΄ μ¬μ©λλλ°,
ν΄λ‘μ λ₯Ό ν΅ν΄ λΉλκΈ° μ½λ°±μ μμ±νλ κ²½μ° νμ¬ μνλ₯Ό 미리 νλν΄ λμ§ μμΌλ©΄
μ€μ λ‘ ν΄λ‘μ μ κΈ°λ₯μ μ€ννλ μκ°μλ μμλ λ³μκ° μ΄λ―Έ λ©λͺ¨λ¦¬μ μ‘΄μ¬νμ§ μλ κ²½μ°κ° λ°μν μ μλ€.
λ°λΌμ μ΄ λ νμν κ²μ΄ λ°λ‘ ν΄λ‘μ μ κ° μΊ‘μ³ κΈ°λ₯μ΄λ€.
π κ° μΊ‘μ³ (Capturing Value)
κ° μΊ‘μ³λ λ§ κ·Έλλ‘ κ°μ μΊ‘μ³ν΄μ μ¬μ©νλ κ²μ λ§νλ€.
κ°μ μΊ‘μ³ν΄μ κ°μ§κ³ μλ€κ°, νμν λλ§λ€ μ΄μ©νλ κ²μ΄λ€.
μ€μ²© ν¨μλ‘ μ€λͺ νλ©΄ μ΄ν΄κ° μ¬μΈ κ² κ°μ μλ§λ μμ λ₯Ό μμ±νλ€.
func add(num: Int) -> (() -> Int) {
var total = 0
func adding() -> Int {
total += num
return total
}
return adding
}
let add_1 = add(num: 1)
let add_2 = add(num: 1)
add_1() // 1
add_1() // 2
add_1() // 3
add_2() // 1
add_2() // 2
add_2() // 3
- μ΅μλ¨μ add ν¨μλ₯Ό 보면 λ¦¬ν΄ νμ
μ΄ ν¨μ κ°μ²΄μ΄κ³ ,
μμ addingμ΄λΌλ ν¨μκ° μ μλμ΄μλ λͺ¨μ΅μ λ³Ό μ μλ€. - addμμλ total λ³μλ₯Ό μ μνκ³ , addingμμ totalμ μ΄μ©ν΄ μ°μ°, totalμ 리ν΄νλ€.
add ν¨μμ λ§μ§λ§μλ adding ν¨μλ₯Ό 리ν΄νλ€. - add ν¨μλ₯Ό μ¬μ©νλ add_1, add_2 μμλ₯Ό μ μν΄μ£Όμκ³ ,
κ° μμ λͺ¨λ num μΈμμ 1μ ν λΉνλ€. - μλμλ add_1 μμμ add_2 μμλ₯Ό μ μΈν΄μ£Όμλλ°,
μ£Όμμ νμΈνλ©΄ μ μΈν λλ§λ€ κ²°κ³Όκ°μ΄ μ¦κ°λλ λͺ¨μ΅μ λ³Ό μ μλ€.
μ΄λ total λ³μκ° μΊ‘μ³λμ΄, μλ‘κ² μ μΈλ λλ§λ€ μ΄κΈ°νλμ§ μκ³
κ·Έ μ μ μΊ‘μ³λ κ°μΌλ‘ κ³μν΄μ μ¬μ©λλ€λ κ²μ μλ―Ένλ€.
π μ΄λ κ² κ° μΊ‘μ³λ₯Ό ν΅νλ©΄ κ°κ°μ add ν¨μλ
μΈμ νΈμΆλλλΌλ μμ λ§μ total λ³μλ₯Ό κ°μ§κ³ μΉ΄μ΄νΈνκ² λλ€.
μ΄λ κ°κ° μμ λ§μ total μ°Έμ‘°λ₯Ό νλ(μΊ‘μ³)νκΈ° λλ¬Έμ΄λ€. π₯
π μ 리
ν΄λ‘μ λ κ³ μ°¨ν¨μμ λΉλκΈ° μ½λ°±μ λ§μ΄ μ΄μ©λλλ°,
κ·Έ μ€μμλ λΉλκΈ° μ½λ°±μ μ΄μ©λλ μ΄μ λ ν΄λ‘μ μ κ° μΊ‘μ³ κΈ°λ₯ λλ¬Έμ΄λ€.
κ° μΊ‘μ³λ κ°μ 미리 νλ, μ μΈλ λλ§λ€ νλν κ°μ μ°Έμ‘°μ μ°μ°μ λμ νλ κ²μ΄λ€.
μ°Έκ³
- π μ€μννΈ νλ‘κ·Έλλ°
- π ν¨μ€νΈμΊ νΌμ€ μ¨λΌμΈ κ°μ - iOS μ± κ°λ° μ¬μΈμ ν¨ν€μ§
'3οΈβ£ Swift > Swift μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘νΌν° κ°λ μ 리 (2); μ°μ° νλ‘νΌν° (0) | 2021.09.22 |
---|---|
[Swift] νλ‘νΌν° κ°λ μ 리 (1); μ μ₯ νλ‘νΌν° (0) | 2021.09.22 |
[Swift] guard / if (feat. μ΅μ λ λ°μΈλ©) (5) | 2021.09.06 |
[Swift] inout νλΌλ―Έν° (0) | 2021.09.05 |
[Swift] splitκ³Ό componentsμ μ°¨μ΄μ (0) | 2021.08.08 |
λκΈ