- ν¨μν νλ‘κ·Έλλ°μ μ΄ν΄νκΈ° μν κ°λ
- μνμ μΈ μ©μ΄ - λ²μ£Όλ‘
- μμκ° μλ μ°μ°μ μ²λ¦¬ν λ νμ©νλ λμμΈ ν¨ν΄
μνμ μΈ λͺ¨λλμ κ°λ
μ 100% λ§μ‘±νλ건 μλλΌ λͺ¨λλ μ΄λΌκ³ λ λΆλ¦.
νλ‘κ·Έλλ°μμ λͺ¨λλκ° κ°μΆ°μΌνλ 쑰건
- νμ
μ μΈμλ‘ λ°λ νμ
(νΉμ νμ
μ κ°μ ν¬μ₯)
- νΉμ νμ
μ κ°μ ν¬μ₯ν κ²μ λ°ννλ ν¨μκ° μ‘΄μ¬
- ν¬μ₯λ κ°μ λ³ννμ¬ κ°μ ννλ‘ ν¬μ₯νλ ν¨μκ° μ‘΄μ¬
-> νμ€νκ² κ°μ μμ€μ§λ§, Generic, Opaque Types κ°λ€λ λλμ΄ λ€μλ€.
λͺ¨λλλ₯Ό μ΄ν΄νκΈ° μν΄ νμν κ°λ
1. 컨ν
μ€νΈ
- 컨ν
μΈ λ₯Ό λ΄κ³ μλ μ΄λ€ κ².
- Optional μμ 컨ν
μ€νΈ
- .some(let value) μνλΌλ©΄, value λ₯Ό λ΄κ³ μλ 컨ν
μ€νΈκ° λλκ±°κ³ ,
- .none μνλΌλ©΄, λ΄λΆμ κ°μ΄ μλ 컨ν
μ€νΈκ° λλ κ².
- Wrapped νμ
μ μΈμλ‘ λ°λ Generic νμ
-> 첫λ²μ§Έ 쑰건 λ§μ‘±.
- Int, String, Double λ± λ€λ₯Έ νμ
μ κ°λ 컨ν
μ€νΈλ₯Ό μμ±(λ°ν)ν μ μμ -> λλ²μ§Έ 쑰건 λ§μ‘±.
2. ν¨μ κ°μ²΄
- ν¨μ κ°μ²΄ : 맡μ μ μ©ν μ μλ 컨ν
μ΄λ νμ
- μ΅μ
λ μμ ν¨μ κ°μ²΄μ΄λ€.
Optional(2).map { $0 + 2 }
- Optional μΈλ° κ°λ₯ν μ΄μ λ,
- map μ΄λΌλκ² κΈ°μ‘΄ 컨ν
μ΄λ μμ κ°μ κΉμ ν¨μλ₯Ό μ μ©νκ³ λ€μ 컨ν
μ΄λμ ν¬μ₯ν΄μ λ°νν΄μ£Όλ κ²μ΄κΈ° λλ¬Έ.
- 컨ν
μ΄λλ λ€λ₯Έ νμ
μ κ°μ λ΄κΈ° λλ¬Έμ 컨ν
μ€νΈλΌκ³ λ³Ό μ μλ€.
- Optinal μ κΉμ κ°μ΄ μμΌλ©΄ 2λ₯Ό λνκ³ ,
- κ°μ΄ μμΌλ©΄ μ°μ°μ νμ§ μκ³ λΉ μ»¨ν
μ€νΈλ‘ λ€μ λ°ν.
3. λͺ¨λλ
- λͺ¨λλ : λ«ν ν¨μ κ°μ²΄
- λ«ν ν¨μ κ°μ²΄ : ν¨μκ°μ²΄ μ€μμ, μμ μ 컨ν
μ€νΈμ κ°μ 컨ν
μ€νΈμ ννλ‘ λ§΅νν μ μλ ν¨μ κ°μ²΄. (Optional μ Optional λ‘ λ§΅νν μ μλ!) -> μ΄κ²μ μν΄
flatMap
μ νμ©.
Optional(3).flatMap {
if $0.isMultiple(of: 2) {
return num * 2
}
return nil
}
- κ·Όλ° map μ΄λ λμ°¨μ΄μ¬...?
- 컨ν
μ€νΈ λ΄λΆμ 컨ν
μ€νΈλ₯Ό λͺ¨λ κ°μ μμμΌλ‘ νννκ² νΌμΉλ€
- ν¬μ₯λ κ° λ΄λΆμ λ ν¬μ₯λ κ°μ΄ μλ€λ©΄ κ·Έκ±Έ κ°μ μμμΌλ‘ νΌμ³μ€λ€
- Sequence<Optional<?>> μ΄λΌλ©΄,
compactMap
μ μ¬μ©ν΄μ νΌμΉκ³ , μ΄ κ²½μ°κ° μλλΌλ©΄ flatMap
μΌλ‘ νΌμΉλ€.
let optionals: [Int?] = [1, 2, nil, 5]
let mapped: [Int?] = optionals.map { $0 }
let compactMapped: [Int] = optionals.compactMap { $0 }
let multipleContainer = [[1, 2, nil], [3, nil], [4, 5, nil]]
multipleContainer.map { $0.map { $0 } }
multipleContainer.flatMap { $0.flatMap { $0 } }
func map<U>(_ transform: (Wrapped) throws -> U) rethrows U?
func flatMap<U>(_ transform: (Wrapped) throws -> U?) rethrows U?
κ·Έλμ flatMap μ κ²½μ°,
- κ°μ΄ μλ€λ©΄ κ·Έ κ°μ κ°μ₯ λ°κΉ₯μͺ½ 컨ν
μ΄λλ§ μμμ λ°ν
- κ°μ΄ μλ€λ©΄ κ·Έ λ€λΆν°λ μ€νλμ§ μκ³ λΉ μ»¨ν
μ΄λλ₯Ό λ°ν
νκΈ° λλ¬Έμ, Optional Binding κ³Ό λκ°μ λμμ νκ² λλ€.
why? Optional μ΄ Monad λκΉ
-> νλ«λ§΅ λͺ¨μμ λͺ¨λλ μ°μ°μλ₯Ό ꡬννλ©΄ μ¬μ©μ μ μ νμ
λ λͺ¨λλλ‘ μ¬μ©ν μ μλ€.
μΆμ² / μ°Έκ³
μΌκ³°μ μ€μννΈ5 νλ‘κ·Έλλ°