π 1 . ν΄λ‘μ (Closure)
ν΄λ‘μ μ ν¨μμ κΈ°λ₯μ λμΌ νλ€. ν΄λ‘μ λ μ΄λ¦μ΄ μλ ν¨μλ‘ ν¨μλ³΄λ€ μ’ λ ν° κ°λ μ΄λΌκ³ 보면 λλ€.
μ€μννΈλ μΌκΈ κ°μ²΄λ‘ μ·¨κΈνλ€. (νλ‘ν μ½λ μΌκΈκ°μ²΄)
ν¨μμ νλ‘ν μ½λ νμ μΌλ‘ μ·¨κΈνλ€.
→ ν¨μλ λ³μμ ν λΉ κ°λ₯
→ ν¨μλ₯Ό νΈμΆν λ ν¨μλ₯Ό νλΌλ―Έν°λ‘ μ λ¬ κ°λ₯
→ ν¨μμμ ν¨μλ₯Ό λ°ν κ°λ₯
- ν¨μλ λ€λ₯Έ μ½λμμ νΈμΆν λ ν¨μλͺ μΌλ‘ νΈμΆνλ€.
- ν΄λ‘μ λ μ΄λ¦μ΄ μλ ν¨μλ‘ μ΄λ¦μ΄ μμ΄λ νΈμΆν μ μλ€.
-> ν¨μλ₯Ό μ€νν λ νλΌλ―Έν°μ ν΄λ‘μ ννλ‘ μ λ¬νκΈ° λλ¬Έ
-> ν¨μλ₯Ό μ€νν λ νλΌλ―Έν°λ‘ ν΄λ‘μ λ₯Ό μ μνλ©΄μ λ°λ‘ μ λ¬ν μ μλ€. λ°λΌμ ν¨μλͺ μ΄ νμνμ§ μλ€!!!
π 2. ν΄λ‘μ ꡬ쑰 λ° μΆμ½
π ν¨μ ννμμ ν΄λ‘μ λ§λ€κΈ° π
//νν(Trailing) ν΄λ‘μ
closureParamFunction(closure: {
print("ν¨μ μ€ν")
})
closureParamFunction(closure:) {
print("ν¨μ μ€ν")
}
closureParamFunction() {
print("ν¨μ μ€ν")
}
closureParamFunction() {
print("ν¨μ μ€ν")
}
closureParamFunction {
print("ν¨μ μ€ν")
}
//νλΌλ―Έν° μλ΅
closureParamFunction(closure: { str in
return str.count
})
closureParamFunction{ $0.count }
returnμ΄ μκΈ° λλ¬Έμ μμνλ μλ΅ κ°λ₯.
ν μ€μΌ κ²½μ° return μλ΅ κ°λ₯
맀κ°λ³μ νμ μΆλ‘ μ΄ κ°λ₯νλ€λ©΄ νμ μλ΅ κ°λ₯
( ) -> ( ) : μΈνκ³Ό μμνμ΄ μλ€λ©΄ μλ΅ κ°λ₯
ν΄λ‘μ μ체λ‘λ μ무 κ²λ ν μ μλ€. λ³μμ ν λΉ νμ§ μμΌλ©΄ μλ¬κ° λ°μνλ€.
ν¨μλ λ³μμ ν λΉ κ°λ₯νλ€.
func addStr(param: String) -> String {
return param + "!!"
}
//ν¨μλ₯Ό λ³μμ ν λΉ
var str = addStr //νμ
λͺ
μ: var clo: (String) -> String = addStr
//addStr(param: "μλ
νμΈμ")
//μλλ ν¨μμ νλΌλ―Έν°λ₯Ό λ£μ΄μ£Όμ΄μΌ νμ§λ§ νΈμΆν λ νλΌλ―Έν°κ° λ€μ΄κ°κΈ° λλ¬Έμ () μλ΅ κ°λ₯
str("μλ
")
κ°μ κ°λ μΌλ‘ ν΄λ‘μ λ λ³μμ ν λΉ κ°λ₯.
//ν΄λ‘μ λ₯Ό λ³μμ ν λΉ
let clo = {(param: String) -> String in
return param + "!!"
}
//ν΄λ‘μ μ€ν
clo("μλ
")
π Reference