λͺ¨λλ
λͺ¨λλλ νΉμ κΈ°λ₯μ΄ μλ λμμΈ ν¨ν΄ νΉμ μλ£κ΅¬μ‘°λΌκ³ ν μ μλ€.
< λͺ¨λλκ° κ°μΆ°μΌ νλ 쑰건 >
- νμ μ μΈμλ‘ λ°λ νμ ( νΉμ νμ μ κ°μ ν¬μ₯ )
- νΉμ νμ μ κ°μ ν¬μ₯ν κ²μ λ°ννλ ν¨μ(λ©μλ)κ° μ‘΄μ¬
- ν¬μ₯λ κ°μ λ³ννμ¬ κ°μ ννλ‘ ν¬μ₯νλ ν¨μ(λ©μλ)κ° μ‘΄μ¬
컨ν μ€νΈ
- 컨ν μ€νΈcontextλ 컨ν μΈ λ₯Ό λ΄μ μμ κ°μ κ²
- ν¨μμ μ λ¬μΈμλ‘ μ»¨ν μ€νΈκ° λ€λ₯Έ κ°μ μ λ¬νλ©΄ μ€λ₯κ° λ°μνλ€.
func addThree(_ num: Int) -> Int {
return num + 3
}
//맀κ°λ³μλ‘ μΌλ° Int νμ
μ κ°μ λ°κΈ° λλ¬Έμ μ μμ μΌλ‘ μ€ν
addThree(2)
//μ λ¬μΈμκ° μμν κ°μ΄ μλ μ΅μ
λμ΄λΌλ 컨ν
μ€νΈλ‘ λλ¬μΈμ¬ μ λ¬λμκΈ° λλ¬Έμ μ€λ₯ λ°μ
addThree(Optional(2))
ν¨μκ°μ²΄
- ν¨μκ°μ²΄functorλ 맡mapμ μ μ©ν μ μλ 컨ν μ΄λ νμ μ΄λ€.
- Array, Dictionary, Set λ±λ± μ€μννΈμ λ§μ 컬λ μ νμ μ΄ ν¨μκ°μ²΄μ΄λ€.
νλ«λ§΅ flatMapκ³Ό μ»΄ν©νΈλ§΅ compactMap
- ν¨μκ°μ²΄ μ€μμ μμ μ 컨ν μ€νΈμ κ°μ 컨ν μ€νΈμ ννλ‘ λ§΅νν μ μλ ν¨μκ°μ²΄λ₯Ό λ«ν ν¨μκ°μ²΄λΌκ³ νλ©°, λͺ¨λλλ λ«ν ν¨μκ°μ²΄μ΄λ€.
- μ΄λ° 맡νμ μννλλ‘ νλ«λ§΅flatMapμ΄λΌλ λ©μλλ₯Ό νμ©νλ€.
- νλ«λ§΅ flatMap μ 맡 map κ³Ό λ€λ₯΄κ² 컨ν μ€νΈ λ΄λΆμ 컨ν μ€νΈλ₯Ό λͺ¨λ κ°μ μμμΌλ‘ νννκ² νΌμ³μ€λ€.
func doubleEven(_ num: Int) -> Int? {
if num.isMultiple(of: 2) {
return num * 2
}
return nil
}
Optional(3).flatMap(doubleEven)
//nil
- compactMapμ μ€μννΈ 4.1 λ²μ λΆν° flatMapμ΄ νλ μν μ€ νλλ₯Ό λ§‘κ² λμλ€.
- compactMapμ μ¬μ©λ²μ flatMapκ³Ό κ°μ§λ§ μ’ λ λΆλͺ ν λ»μ λνλ΄κΈ° μν΄ compactMapμ΄λΌλ μ΄λ¦μ μ¬μ©νλ€.
let optionals: [Int?] = [1, 2, nil, 5]
let mapped: [Int?] = optionals.map{ $0 }
let compactMapped: [Int] = optionals.compactMap{ $0 }
print(mapped) //[Optional(1), Optional(2), nil, Optional(5)]
print(compactMapped) //[1, 2, 5]
- λ§μ½ νλ«λ§΅ flatMap μ μ¬μ©νμ§ μμΌλ©΄μ νλ«λ§΅ flatMap κ³Ό κ°μ ν¨κ³Όλ₯Ό μ»μΌλ €λ©΄ λ°μΈλ©μ μ§μ ν΄μ£Όλ©΄ λλ€.
func stringToInteger(_ string: String) -> Int? {
return Int(string)
}
func integerToString(_ integer: Int) -> String? {
return "\(integer)"
}
var optionalString: String? = "2"
var result: Int?
if let string: String = optionalString {
if let number: Int = stringToInteger(string) {
if let finalString: String = integerToString(number) {
if let finalNumber: Int = stringToInteger(finalString) {
result = Optional(finalNumber)
}
}
}
}
print(result) //Optional(2)
- νλ«λ§΅ flatMap μ 체μ΄λ μ€κ°μ, μ°μ°μ μ€ν¨νλ κ²½μ°λ κ°μ΄ μμ΄μ§λ κ²½μ°μλ λ³λμ μμΈ μ²λ¦¬μμ΄ λΉ μ»¨ν μ΄λλ₯Ό λ°ννλ€.
func integerToNil(param: Int) -> String? {
return nil
}
optionalString = "2"
result = optionalString.flatMap(stringToInteger).flatMap(integerToNil).flatMap(stringToInteger)
print(result) //nil
'π iOS > κΈ°μ΄λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift κΈ°μ΄] νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ° ( POP ) (0) | 2023.06.06 |
---|---|
[Swift κΈ°μ΄] μ λ€λ¦ ( Generic ) (0) | 2023.06.05 |
[Swift κΈ°μ΄] 맡, νν°, 리λμ€ (0) | 2023.01.27 |
[Swift κΈ°μ΄] μ΅μ λ 체μ΄λκ³Ό λΉ λ₯Έ μ’ λ£ (2) | 2023.01.19 |
[Swift κΈ°μ΄] ν΄λ‘μ (0) | 2023.01.19 |