ν°μ€ν 리 λ·°

μλ νμΈμ? λꡬ리μ λλ€γ γ
μ€λμ closureμ λν΄μ λ°°μλ³΄λ €κ³ ν΄μ!
Closure(ν΄λ‘μ )
ν΄λ‘μ λ μ½λμμ μ£Όλ³μ μ λ¬κ³Ό μ¬μ©ν μ μλ μ체 ν¬ν¨λ κΈ°λ₯ λΈλμ λλ€.
λ€λ₯Έ μΈμ΄μμλ λλ€μ μ μ¬νλ€κ³ νλ€μ.
μ¬λ¬λΆ ν¨μ μμμ£ ?
ν¨μλ ν΄λ‘μ μ μΌνμ΄κ³ μ΄λ¦μ΄ μλ ν΄λ‘μ μ λλ€.
ν΄λ‘μ κ° μ½λ λΈλμ΄κ³ μ΄λ¦μ΄ μμΌλ ν¨μμ ννμ κ°λ€μ
κ·ΈλΌ ν΄λ‘μ μ κΈ°λ³Έ ννλ μ΄λ€κ²μΌκΉμ?
μλ κ·Έλ¦Όμ²λΌ ꡬμ±μ΄ λ©λλ€.
νλΌλ―Έν°μ 리ν΄νμ μ μΈμ΄ λλλ©΄ inμ κΈ°μ€μΌλ‘ μ€ν μ½λκ° κ΅¬λΆμ΄ λ©λλ€.
νλ² μμ λ₯Ό ν΅ν΄ μμ보λλ‘ ν κ²μ!
μ΄λ€ μμ λ₯Ό λ€λ€λ³Όκ±°λ...
λ¬Έμμ΄μ λ΄μ λ°°μ΄μ μ λ ¬νλ κ²μ λν΄ νλ² ν΄λ³΄λλ‘ ν κ²μ!
let cities = ["Seoul", "Incheon", "Busan", "Daegu", "Gwangju"]
func sortingCities(_ city1: String, _ city2: String) -> Bool {
return city1 < city2
}
var sortedCities2 = cities.sorted(by: sortingCities)
// ["Busan", "Daegu", "Gwangju", "Incheon", "Seoul"]
λ¨Όμ μ λ ¬νλ ν¨μλ‘ ννμ νλ©΄ μμ²λΌ
ν¨μλ₯Ό μ μνκ³ μ μ©νλ ννλ‘ λ©λλ€.
κ·ΈλΌ μ΄κ²μ ν΄λ‘μ λ‘ μ μ©ν΄ 보면 μλ μ²λΌ λ©λλ€.
let cities = ["Seoul", "Incheon", "Busan", "Daegu", "Gwangju"]
var sortedCities2 = cities.sorted(by: { (city1: String, city2: String) -> Bool in
return city1 < city2
})
ν¨μκ° μλ μ리μ ν΄λ‘μ ννλ‘ λ€μ΄κ°μ΅λλ€.
μ΄μ μ¬κΈ°μ μ¬λ¬ νλͺ©λ€μ μλ΅ν μ μλλ°μ
λ¨Όμ νλΌλ―Έν°μ νμ κ³Ό λ°νλλ κ°μ νμ μ μ μΆν μ μκΈ° λλ¬Έμ νμ μ μλ΅ν μ μμ΄μ
κ·Έλ¦¬κ³ μ§κΈκ°μ΄ λ¨μΌ ν΄λ‘μ μΌλλ returnλ μλ΅ν μ μμ΅λλ€.
μλμ²λΌμ!
let cities = ["Seoul", "Incheon", "Busan", "Daegu", "Gwangju"]
var sortedCities2 = cities.sorted(by: { city1, city2 in
city1 < city2
})
μ΄λ²μλ μΈμμ μ΄λ¦λ μλ΅ν μ μλλ°μ
$0, $1 μ΄λ°μμΌλ‘μ
μλ₯Ό λ€μ΄ $1κΉμ§ ννμ νλ©΄ 1μ΄ κ°μ₯ λμ μ«μμ΄λ―λ‘ μΈμκ° 2κ° μλ€κ³ ν΄λ‘μ μμ μΈμμ ν©λλ€.
λ°λ‘ μ΄λ κ²μ
let cities = ["Seoul", "Incheon", "Busan", "Daegu", "Gwangju"]
var sortedCities2 = cities.sorted(by: { $0 < $1 })
μ κΈ°νμ£ ?
νμ§λ§ μλ΅λ λ§νΌ μ½λλ₯Ό μ΄ν΄νκΈ°μ μ½κ° μ΄λ €μΈ μ μμΌλ μ£Όμν νμκ° μμ΄ λ³΄μ΄λ€μ.
νν ν΄λ‘μ (Trailing Closures)
κ·Έλ°λ° ν΄λ‘μ μ μ€νμ½λκ° κΈΈμ΄μ§μλ μκ³ κ·Έλ¬λ€ 보면 μΈμ λΆλΆμ΄ κΈΈμ΄μ§ μ μλλ°μ
μ΄λ΄λ ν΄λ‘μ λ₯Ό ν¨μ μΈμμ΄μ§λ§ ν¨μ νΈμΆμ μκ΄νΈ λ€μμ μμ±ν μ μμ΅λλ€.
μ΄κ²μ λ°λ‘ νν ν΄λ‘μ λΌκ³ ν©λλ€!
μ΄λ»κ² μ¬μ©νλμ§ νλ² λ³΄μμ£ !
var sortedCities2 = cities.sorted() { $0 < $1 }
λ°λ‘ μ΄λ κ² μ¬μ©ν μ μμ΅λλ€.
λ§μλλ¦°λλ‘ μΈμμΈ ν΄λ‘μ λ₯Ό λ€λ‘ 보λ΄λ²λ Έμ£ ?
μΈμκ° μ§κΈμ²λΌ ν΄λ‘μ 1κ°λΌλ©΄ sortedλ€μ μκ΄νΈλ μ κ±°ν μ μμ΅λλ€!!
λ§μ½ μΈμκ° 2κ° μ΄μμ΄λΌλ©΄ μ΄λ»κ² λ κΉμ?
κ·Έλ κ² λλ€λ©΄ 첫λ²μ§Έ νν ν΄λ‘μ μ μΈμ λΌλ²¨μ μλ΅νκ³ λ¨μ νν ν΄λ‘μ μ λΌλ²¨μ νκΈ°ν©λλ€.
μ΄κ²λ λ¬΄μ¨ λ§μΈμ§ λͺ¨λ₯΄μκ² μ£ ? μμ λ 보면 μ’λ μ΄ν΄νμκΈ° μ¬μ°μ€κ±°μμ!
μ¬μ§ κ°€λ¬λ¦¬μμ μ¬μ§ νλλ₯Ό λΆλ¬μ€λ ν¨μλ₯Ό κ°μ§κ³ μ€λͺ ν΄λ³Όκ²μ
func loadPicture(from server: Server, completion: (Picture) -> Void, onFailure: () -> Void) {
if let picture = download("photo.jpg", from: server) {
completion(picture)
} else {
onFailure()
}
}
loadPicture(from: someServer) { picture in
someView.currentPicture = picture
} onFailure: {
print("Couldn't download the next picture.")
}
ν¨μ μ μΈ μ½λλ₯Ό 보μλ©΄ ν΄λ‘μ κ° 2κ°κ° λ€μ΄κ°κ²μ λ³Ό μ μμ΄μ
κ·Έ μλμ ν¨μλ₯Ό μ§μ μ¬μ©νλ μ½λμΈλ°μ!!
μ¬μ§μ λΆλ¬μ€κΈ° μ±κ³΅νλ©΄ λ·°μ λΏλ €μ£Όκ³ μ€ν¨νλ©΄ μλ¬λ₯Ό μΆλ ₯νλ ν¨μμ λλ€!
첫 λ²μ§Έ ν΄λ‘μ μ λΌλ²¨μ μλ΅ λμ΄μ ννλμκ³ λ λ²μ§Έ ν΄λ‘μ μ λΌλ²¨μ κ·Έλλ‘ μ΄μ μλ λͺ¨μ΅μ λ³Ό μ μμ΅λλ€.
μΊ‘μ³κ° (Capturing Values)
ν΄λ‘μ λ₯Ό μ¬μ©νλ©΄ μΊ‘μ³κ°μ΄λΌλ κ°λ μ΄ μλλ°μ!
κ·Έλ₯ λ§λλ‘ μΊ‘μ³λ κ°μ λλ€! κ·Έ μ¬μ© μμλ₯Ό μ½λλ₯Ό 보면μ μμλ³Όκ²μ!
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
// returns a value of 10
incrementByTen()
// returns a value of 20
incrementByTen()
// returns a value of 30
μ΄ ν¨μλ μ€μ²© ν¨μκ° ν¬ν¨λκ³ ()->Intλ₯Ό μ¦, ν¨μλ₯Ό λ°ννλ ν¨μμ λλ€
μ€μ²©ν¨μμΈ incrementer()λ₯Ό μ¬μ©νκΈ° μν΄ runningTotal, amountκ°μ μΊ‘μ²λ₯Ό νμ¬ ν¨μμμ μ¬μ©νκ² λ©λλ€.
μ΄ ν¨μλ₯Ό ν λΉλ°μ incrementByTen μΈμ€ν΄μ€κ° νΈμΆλ λ λ§λ€ ν¨μκ° κ³μ νΈμΆλλκ²μ λ³Ό μ μμ΅λλ€.
λλ²μ§Έ νΈμΆμ νλ©΄ μλ‘κ² λΆλ¦¬λ runningTotal λ³μμ μ°Έμ‘° μ μ₯λ©λλ€.
λ§μ½ λ€λ₯Έ μΈμ€ν΄μ€μ ν¨μλ₯Ό λ€μ ν λΉν΄ μ€λ€λ©΄ μ΄ μ°Έμ‘°λ μ¬λΌμ§κ³ μ΄κΈ° κ°μ μ°Έμ‘°νκ² λ κ²λλ€.
κ·Έλ λ€λ©΄ incrementByTenμ λ€λ₯Έ μΈμ€ν΄μ€μ ν λΉν΄ μ£Όλ©΄ μ΄λ»κ² λ κΉμ?
λ°λ‘ μ΄μ μ κ³μ°λμλ κ°μ λ°μ κ³μ°νκ² λ©λλ€.
μ΄ κ²°κ³Όλ₯Ό 보μ ν΄λ‘μ λ μ°Έμ‘°νμ μΈκ²μ μ μ μμ΅λλ€!!
μ΄μ€μΌμ΄ν ν΄λ‘μ (Escaping Closures)
μ΄λ²μ μ΄μ€μΌμ΄ν ν΄λ‘μ μ λν΄μ λ³Όκ±°μμ!
μλΉν μ€μνκ³ μμ£Ό μ¬μ©νλ ννμ΄λ μ§μ€ν΄μ 보μλ©΄ μ’μκ²κ°μ΅λλ€!!
μ΄μ€μΌμ΄ν ν΄λ‘μ λ ν¨μκ° λλ λ€μ μ€νμ΄ λλλ‘ νλ κΈ°λ₯μΈλ°μ!!
ν¨μκ° λλ λ€μ μ€νμ μνλ νλΌλ―Έν°μ @escapingμ λΆμ¬μ£Όλ©΄ λ©λλ€!!
λ ν΄λ‘μ κ° νμΆν μ μλ λ°©λ² μ€ νλλν¨μ λ°κΉ₯μ μ μλ λ³μμ μ μ₯λλ κ²μ λλ€
μ΄ κΈ°λ₯μ λΉλκΈ° μμ μ νλ ν¨μκ° μ’ λ£λλ©΄ completionμΌλ‘ μμ£Ό μ¬μ©λ©λλ€!
μ½λλ₯Ό 보면μ νλ² νμΈν΄λ³Όκ²μ!
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
completionHandlers.append(completionHandler)
}
μμ μ½λκ° μλλ° ν¨μ μΈλΆμ λ³μμ μ μ₯λλ κ²μ μ μ μμ΅λλ€.
μ΄λ΄λ @escapingμ λ£μ΄μ£Όμ§ μμΌλ©΄ μ»΄νμΌ μ μλ¬κ° λ μ μμ΄μ!
μ΄ κΈ°λ₯μ μ¬μ©ν λ μ£Όμν΄μΌ ν μ μ΄ μλλ°μ!
self λ₯Ό μ°Έμ‘°νλ μ΄μ€μΌμ΄ν ν΄λ‘μ μ self κ° ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²½μ° νΉλ³ν κ³ λ €κ° νμν©λλ€.
μ΄ λΆλΆμ κ°ν μ°Έμ‘° μ¬μ΄ν΄μ΄ μκΈ°κΈ° μ¬μ΄λ° μ¬μ΄ν΄μ λν΄ κ³΅λΆλ₯Ό λ νκ³ κ³΅λΆν΄ 보λλ‘ ν κ²μ!
μ΄λ² μκ°μλ ν΄λ‘μ κ° μ΄λ€ μν μ νλμ§ μμ보μλλ°μ
ν΄λ‘μ κ° λμ§, κ·Έλ¦¬κ³ μ μ©νκ² μ¬μ©λ μ μλ μ΄μ€μΌμ΄ν ν΄λ‘μ κΉμ§ μμλ³Ό μ μμμ΅λλ€.
νΉμ λ΄μ©μ λν΄ νΌλλ°±μ΄ μμΌμλ€λ©΄ λκΈ λ¨κ²¨μ£ΌμΈμ!
μΈμ λ νμμ λλ€~~~γ γ
κΈ μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€~~~~!
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [iOS/Swift] νλ‘νΌν°(Properties) μμ보기(μ μ₯ νλ‘νΌν°)-(1/3) (0) | 2022.05.30 |
|---|---|
| [iOS/Swift] ꡬ쑰체(struct)μ ν΄λμ€(class)μ μ°¨μ΄ μμ보기! (0) | 2022.05.29 |
| [iOS/Swift] Switch case λ¬Έ μμ보기! (0) | 2022.05.26 |
| [iOS/Swift] Collection Type - Dictionary(λμ λ리) (0) | 2022.05.25 |
| [iOS/Swift] Collection Type - Set(μ§ν©) (0) | 2022.05.24 |
- Total
- Today
- Yesterday
- Clean
- ν μ€νΈ
- Protocol
- μ€μννΈ map
- func
- νλ‘ν μ½
- set
- μ€μννΈ
- RX
- observable
- Unit Test
- μ€ν λ μ΄μμ
- test
- URLSession
- xcode
- RxSwift
- swift 곡λΆ
- XCTest
- swift νλ‘ν μ½
- Property
- Swift Network
- ios
- νλ‘νΌν°
- swift urlsession
- 곡λΆ
- autolayout
- network
- μ€μννΈ κ³΅λΆ
- μ€μννΈ νλ‘ν μ½
- swift
| μΌ | μ | ν | μ | λͺ© | κΈ | ν |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |