고차함수는 다른 함수를 인자로 받는 함수라는 뜻입니다. 이 사실을 기억하고 아래 예시를 봅시다.
일반 반복문으로 구현하는 경우 return 문은 printFirstA라는 함수를 리턴 시키므로 A 하나만을 출력합니다.
var alphabets = ["A", "A", "A"]
func printFirstA(strings: [String]) {
for string in strings {
if string == "A" {
print(string)
return
}
}
}
printFirstA(strings: alphabets)
/*
🖨 출력내용
A
*/
우리의 의도는 위와 같이 A를 1개만 출력하는 것이었으나 forEach문을 사용하는 경우 의도와 다르게 A가 3번 출력됩니다.
그 이유는 return 문이 printFirstA라는 함수를 리턴시키는 것이 아니라 forEach 문에 전달된 클로저 { string in … }을 리턴시키기 때문입니다. 따라서 모든 A가 출력되는 것입니다.
var alphabets = ["A", "A", "A"]
func printFirstA(strings: [String]) {
strings.forEach { string in
if string == "A" {
print(string)
return
}
}
}
printFirstA(strings: alphabets)
/*
🖨 출력내용
A
A
A
*/