ν΄λ‘μ (Closure) λ?
- ν΄λ‘μ (Closure)λ μ½λμμ μ λ¬λκ³ μ¬μ©λ μ μλ μ체μ μΈ(self-contained) ν¨μ λΈλ‘
- μ€μννΈμμμ ν΄λ‘μ λ Cμ Objective-Cμμμ λΈλ‘κ³Ό μ μ¬νκ³ λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄μμλ λλ€ν¨μμ μ μ¬
- ν΄λμ€μ λ§μ°¬κ°μ§λ‘ μ°Έμ‘° νμ !!
- ν΄λ‘μ ννμ μ΅μ ν λμ΄μ κ°κ²°νκ³ λͺ ν, μ½λμ λͺ νμ±κ³Ό μλλ₯Ό μμ§ μμΌλ©΄μλ λ¬Έλ²μ μΆμ½ν΄ μ¬μ©ν μ μλ λ€μν λ¬Έλ²μ μ΅μ ν λ°©λ²μ μ 곡
ν΄λ‘μ (Closure) ν¨μ νν (Closure Expression Syntax)
{ (맀κ°λ³μ λͺ©λ‘) -> λ°ννμ
in
μ€ν μ½λ
}
μλ¬Έ) sorted(by: )λ©μλμ ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ λ°°μ΄ μ 리νκΈ°.
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
ν΄λ‘μ (Closure) ν¨μ VS μΌλ°ν¨μ
μΌλ°ν¨μ
- μ΄λ¦μ΄ μλ€.
- func ν€μλκ° μ‘΄μ¬νλ€.
- in ν€μλκ° μ‘΄μ¬νμ§ μλλ€.
var counter = 0
func addCounter() {
counter += 1
}
addCounter()
addCounter()
print(counter) // κ²°κ³Ό 2
vs
ν΄λ‘μ (Closure) ν¨μ
- μ΄λ¦μ΄ μλ€.
- func ν€μλκ° μ‘΄μ¬νμ§ μλλ€.
- in ν€μλκ° μ‘΄μ¬νλ€. κΈ°λ³Έ ν΄λ‘μ λ¬Έλ²
var counter = 0
let addCounter = {
counter += 1
}
addCounter()
addCounter()
print(counter) // κ²°κ³Ό 2
μ λ μ½λλ₯Ό λΉκ΅νλ©΄, Closureλ λ³μμ κ°μ μ μΈνλ λμ μ λ³μμ ν¨μλ₯Ό μ μΈ
μ¬κΈ°μλ addCounter λ³μμ ν¨μλ₯Ό μ μΈ
κ·Έλ¦¬κ³ μ΄ λ³μλ ν¨μμ²λΌ νΈμΆμ ν μ μλ€. (addCounter() νν)
ν΄λ‘μ (Closure) μλ΅
μμ μμ λ‘ λ³΄μΈ sorted(by: (String, String) -> Bool)) λ©μλλ₯Ό νμ©νμ¬ ν΄λ‘μ μλ΅λ²μ μμ보μ
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
1) λ°ν, μΈμ νμ μλ΅
νμ μ μ μ μλ κ²½μ° νμ μλ΅ κ°λ₯!
sorted(by: (String, String) -> Bool)) λ©μλλ μ΄λ―Έ String νμ μ μΈμκ° λ€μ΄μ€κ³ , λ°ν νμ μ΄ Boolμ΄λΌλ κ±Έ μ μ μμΌλ―λ‘ μλμ κ°μ΄ μλ΅μ΄ κ°λ₯
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
2) λ°ν ν€μλ μλ΅
λ¨μΌ νν ν΄λ‘μ μμλ λ°ν ν€μλλ₯Ό μλ΅ν μ μλ€.
λμ in ν€μλλ μλ΅ λΆκ°!!
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
3) μΈμ μ΄λ¦ μΆμ½ (Shorthand Arguments Names)
ν΄λ‘μ μ 맀κ°λ³μ μ΄λ¦μ΄ κ΅³μ΄ λΆνμνλ€λ©΄ λ¨μΆ μΈμ μ΄λ¦μ νμ©ν μ μλ€.
μΆμ½ μΈμ μ΄λ¦μ μ¬μ©νλ©΄ μΈμ κ°κ³Ό κ·Έ μΈμλ‘ μ²λ¦¬ν λ μ¬μ©νλ μΈμκ° κ°λ€λ κ²μ μκΈ° λλ¬Έμ μΈμλ₯Ό μ λ ₯λ°λ λΆλΆκ³Ό in ν€μλ λΆλΆμ μλ΅ν μ μλ€.
λ¨μΆ μΈμ μ΄λ¦μ ν΄λ‘μ μ 맀κ°λ³μμ μμλλ‘ $0, $1, $2… μ²λΌ νν
reversedNames = names.sorted(by: { $0 > $1 } )
4) μ°μ°μ λ©μλ (Operator Methods)
λ§μ§λ§μΌλ‘ μλ΅ κ°λ₯ν λΆλΆ!!
Swiftμμ String νμ μ°μ°μμλ StringλΌλ¦¬ λΉκ΅ν μ μλ λΉκ΅ μ°μ°μ(>) λ₯Ό ꡬνν΄ λμλ€.
μ΄ λλ¬Έμ κ·Έλ₯ μ΄ μ°μ°μλ₯Ό μ¬μ©νλ©΄ λλ€.
reversedNames = names.sorted(by: >)
μΆμ½ μ κ³Ό ν λΉκ΅
//μΆμ½ μ
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
//μΆμ½ ν
reversedNames = names.sorted(by: >)
ν΄λ‘μ μ κ° μΊ‘μ²(Capturing Values)
ν΄λ‘μ λ νΉμ λ¬Έλ§₯μ μμλ λ³μμ κ°μ μΊ‘μ²ν μ μλ€.
μ΄ λ΄μ©μ Objective-Cμ λΈλ‘ν¨μμ λΉκ΅νμ¬ λ°λ‘ ν¬μ€ν νμΈ!!!!!
↓↓↓↓↓