
애플 공식 문서에 따르면 for-in 루프와 동일한 순서로 시퀀스의 각 요소에 대해 지정된 클로저를 호출합니다.라고 한다.
for-in 루프는 우리가 반복문을 작성할 때 많이 사용한 루프이다. 근데 그것과 동일한 순서로 시퀀스의 각 요소에 대해 지정된 클로저를 호출한다고 한다. 그럼 같은 방식으로 작동된다고 하는 거 같은데라고 생각이 든다.
사실 비슷하게 동작한다는 느낌은 알았지만 for-in만 주로 사용해서 forEach도 적절하게 사용해 보기 위해 알아보는 것이다 ~~ !!
동일한 순서로 시퀀스의 ?????? 시퀀스 ??
여기서 시퀀스는 무슨 말일까??

시퀀스는 해당 요소에 대한 순차적이고 반복적인 액세스를 제공하는 유형입니다.라고 한다.
시퀀스는 한 번에 하나씩 실행할 수 있는 값의 목록이다. 시퀀스의 요소를 반복하는 가장 일반적인 방법은 for-in 루프를 사용하는 것이다.
let oneTwoThree = 1...3
for number in oneTwoThree {
print(number)
}
// Prints "1"
// Prints "2"
// Prints "3"
Array, Dictionary, Set 같은 Collection 타입들은 모두 시퀀스 프로토콜을 채택하고 있다!
자! 다시 forEach로 돌아가보자!
let numberWords = ["one", "two", "three"]
for word in numberWords {
print(word)
}
//print "one"
//print "two"
//print "three"
numberWords.forEach { word in
print(word)
}
// Same as above
위의 예제를 보면 두 루프는 동일한 출력을 생성한다.
동일한 출력이 나온다고 같은 게 아니라 차이점도 존재하는데
for-in 문은 직접 구현하는 반복문이고,
forEach는 내가 반복하고 싶어 하는 구문을 forEach라는 함수 파라미터로 "클로저"로 작성해서 넘겨주는 것이다.
그래서 반복문안에서만 사용할 수 있는 continue, break는 forEach에서는 사용이 불가능하다 !!
return문의 영향을 받는 것도 차이가 있다.
func printnums() {
let nums = [1,2,3]
for num in nums {
print(num)
return
}
}
printnums() // 1
for-in에서는 반복문을 돌다가 return를 만나면 함수 자체가 종료된다. 그래서 첫 번째 반복을 돌다가 return을 만나서 종료가 되어 1 만 출력되었다.
forEach를 보면
func printnums() {
let nums = [1,2,3]
nums.forEach {
print($0)
return
}
}
printnums() // 1 2 3
반복문이 아닌 클로저 즉, 반복하고자 하는 내용을 익명 함수를 전달하기 때문에 return을 만난다는 것은 내가 전달한 클로저를 종료한다는 것을 뜻한다.
근데 forEach는 내가 전달한 클로저를 요소 개수만큼 실행하기 때문에 반복 횟수에 영향을 주지 못한다.
그래서 1 2 3 다 출력이 되었다.
참고 자료
https://developer.apple.com/documentation/swift/array/foreach(_:)
forEach(_:) | Apple Developer Documentation
Calls the given closure on each element in the sequence in the same order as a - loop.
developer.apple.com
https://babbab2.tistory.com/95
Swift) for - in / forEach 제대로 알고 쓰기
안녕하세요 :) 소들입니다 🌸 오늘은 우리가 Swift로 프로그래밍을 하다보면 정말정말 많이 쓰는 for - in forEach 에 대해서 알아보려고 해요!!!! 이 둘의 사용법은 물론 차이점에 대해서도 알아볼 것
babbab2.tistory.com
'Swift' 카테고리의 다른 글
| [Swift] Combine 알아보기 [1] Publisher, Subscriber (1) | 2024.03.12 |
|---|---|
| [Swift] 배열 정렬 sort와 sorted (3) | 2024.02.18 |
| [Swift] Dictionary (2) | 2024.01.01 |
| [Swift] 삼항연산자 (2) | 2023.12.29 |
| [Swift] map{ Int($0)! } vs map{ Int(String($0))! } (2) | 2023.11.18 |