macOS, iOS

[swift] for와 foreach 그리고 filter

SweetDev 2019. 10. 17. 17:44

 

for을 쓸까 foreach를 쓸까는 항상 고민되는 이슈이다. 

 

주변에 좀 물어봤는데 for이 속도가 더 빠르고, 중간에 break도 되고, 아무튼(?) 더 좋았다. forEach는 클로저를 넣을 수 있는게 장점인 것 같다. 

 

 

====

고차함수들을 잘 써야 좋은 프로그래머라고 생각한다. 특히 함수형을 잘 살려야 좋은 swift 개발자라고 나는 생각한다. 

 

 

나는 그동안은 filter라는 함수에 관심이 별로 없었다. 쓸일이 없었다. 

 

 

근데, 이런 함수를 만들려고 하는데...!!!!

이 함수는 리스트 안에, isSelected된 버튼이 있으면, 그 버튼을 리턴해주는 함수이다. 

 

내 의도와는 달리, forEach 안에서 리턴 되어버리는 원하지 않는 결과가 탄생했다... 클로저라서,,,,

 

이럴때 쓰는게 filter이다. 

return daysArray.filter({ $0.isSelected}).first ?? UIButton() 

 

내가 forEach를 돌게 하지 않고,  filter가 daysArray를 돌면서 filter 기준으로 isSelected된 것만 거른 '새로운 배열'을 돌려준다. 나온 새로운 배열에서 첫번째 인자를 이용하는게 저 한줄짜리 코드이다. 

 

====

+) iOS Developers KR 단톡에서 물어보니, functional programming을 하고 싶으면 forEach보다는 map이나 flatmap을 쓰는게 더 좋다고 말했다.