forEach문 안에서 return 사용시 주의 해야할 점

SteadySlower·2022년 7월 31일
0

iOS Development

목록 보기
10/37

forEach는 고차함수이다!

고차함수는 다른 함수를 인자로 받는 함수라는 뜻입니다. 이 사실을 기억하고 아래 예시를 봅시다.

일반 반복문의 경우

일반 반복문으로 구현하는 경우 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
 */

forEach의 경우

우리의 의도는 위와 같이 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
 */
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글