[Swift] forEach와 클로저

민니·2022년 10월 5일
0

Swift 문법

목록 보기
16/17

코드 베이스로 UI를 처음 구성해보던 와중, addSubview 메소드를 사용할 때 forEach 친구를 만나게 되었다.
for in 비슷한 건가 싶기도 하고, 뒤에 붙은 친구는 클로저(해도 해도 어려운!!!!!!!!!!)임이 분명하기에 한번 정리해 보기로



forEach(_:)

오늘도 공식문서부터

for - in loop와 같은 순서로 sequence의 각 요소들에 대한 클로저를 호출한다.

Declaration

func forEach(_ body: (Element) throws -> Void) rethrows

✏️ body: sequence의 요소를 매개변수로 사용하는 클로저


으음 클로저가 sequence의 요소를 매개변수로 사용하여 순환하는구만



클로저

클로저에 대해 잘 모른다면~
🔗 https://velog.io/@vvkkiie/Swift-클로저Closure-fkgdro69
오랜만에 보고 나도 공부했당



forEach와 클로저

클로저 구문에 대한 이해만 있으면 쉽게 활용할 수 있는 구문인 것 같다.

📖 Example

let alphabet: [String] = ["A", "B", "C", "D"]

//클로저는 반환값 타입과 타입 정의를 생략할 수 있음
alphabet.forEach { word in
    print(word)
}
//실행 결과: A B C D

//매개변수명 대신 $0 사용 가능
alphabet.forEach {
    print($0)
}
//실행 결과: A B C D


for-in loop vs forEach

일단 딱 봤을 때 forEach는 클로저를 사용한다는 것이 가장 큰 차이점인 것 같다! 그리고 다음은 공식 문서에 나와 있는 차이점이다.


1. break나 continue문을 사용하여 body 클로저 호출을 종료하거나 후속 호출을 건너뛸 수 없다

✏️ for-in loop

for word in alphabet {
    //B에서 break
    if word == "B" { break }
    print(word)
}

for-in loop에서는 위 예시와 같이 break나 continue를 사용할 수 있다. 하지만 forEach문에서 break나 continue를 사용하려 하면,,,


✏️ forEach

요러한 에러가 뜬다. 루프나 switch문에서만 사용할 수 있다고 한다.



2.body 클로저에서 return을 사용하면, body에 대한 현재 호출만 종료되고 후속 호출은 종료되지 않는다.

✏️ for-in loop

func readAlphabetLoop() {
    for word in alphabet {
        //B에서 break
        if word == "B" { return }
        print(word)
    }
}

readAlphabetLoop() 
//실행결과: A

return문을 사용해 주기 위해 함수 안에 넣고 호출해 주었음.
실행 결과는 A이다. 현재 호출뿐만 아니라 후속 호출도 종료된다.


✏️ forEach

alphabet.forEach { word in
    if word == "B" { return }
    print(word)
}
//실행결과:  A C D

같은 예시를 forEach를 사용하여 표현해 보았다. 실행결과가 A C D 인 것을 보면, 현재 호출만 종료되고 후속 호출은 종료되지 않음을 알 수 있다.


이렇게 각자 차이점을 이용해서 적절한 상황에 사용하면 될 듯하다 'ㅅ' 😆


🔗 애플 공식 문서 - forEach

0개의 댓글