clyne의 개발 기록

[Swift] 간단하게 nil을 필터링! CompactMap! 본문

iOS/Swift

[Swift] 간단하게 nil을 필터링! CompactMap!

clyne_dev 2021. 4. 29. 21:24

안녕하세요~!

iOS개발자 CNOO 입니다.

오늘은~~~

제가 자주 활용하는 CompatMap에 대해서 알아보겠습니다.

 

 

nil을 처리하는 방법은 다양합니다.

 

 

예제 1.


let array = [1, 2, nil, 4, 5, nil]
let nonNilArray1 = array.filter{ $0 != nil}
let nonNilArray2 = array.flatMap{ $0 }
let nonNilArray3 = array.compactMap{ $0 }

print(array)           // [Optional(1), Optional(2), nil, Optional(4), Optional(5), nil]
print(nonNilArray1)    // [Optional(1), Optional(2), Optional(4), Optional(5)]
print(nonNilArray2)    // [1, 2, 4, 5]
print(nonNilArray3)    // [1, 2, 4, 5]

그런데,  이중에, flatMap은  Swift 4에서 Deprecated되었다고 하네요..

왜 Deprecated되었는지는  찾아보기 귀찮아서........

잘 모르겠네요...

 

 

 

예제 2.

저는 compactMap을 RxSwift의 operator사이에 자주 끼워넣습니다.


let optionalIntRelay = PublishRelay<Int?>()

optionalIntRelay
    .compactMap{ $0 }
    .map{ "결과값은 \($0)"}
    .bind(onNext: { print($0) })
    .disposed(by: disposeBag)
    
optionalIntRelay.accept(1)
optionalIntRelay.accept(nil)
optionalIntRelay.accept(2)

이러면, nil 값은 필터링 되어서, 

결과는

이렇게 나오게 됩니다!

 


저는 두 개의 예제만 보여드렸지만, nil처리하는 부분에서 많이 사용됩니다!

코드를 좀 더 예쁘게 만들 수 없을까 고민하실 떄, compactMap을 사용해보세요!!! ㅎㅎ

 

그럼 안뇽~