for - in
배열의 개수만큼 반복하기 때문에
for - in 반복문을 사용해서 배열의 모든 요소에 루프 상수로 접근이 가능하다.
nums의 요소 개수만큼 반복문이 반복한다.
현재 반복문의 index도 알고 싶으면 enumerated / indices를 이용하거나,
for (index, num) in nums.enumerated() {
print("(index: \(index) num: \(num))")
}
for index in nums.indices {
print("(index: \(index) num: \(nums[index]))")
}
또는 배열의 개수에서 index로 접근해서 아래처럼 해줄 수도 있다.
for index in 0..<nums.count {
print("(index: \(index) num: \(nums[index]))")
}
Dictionary는 순서가 없고, 정렬되지 않음!!
루프 상수가 튜플(key, value) 타입인데 아래와 같이 접근할 수 있다.
let dict: [String : String] = ["A" : "Apple", "B" : "Banana", "C" : "Cherry"]
for (key, value) in dict {
print("(\(key) : \(value))")
}
// (B : Banana) (C : Cherry) (A : Apple)
for element in dict {
print("\(element.key) : \(element.value))")
}
// (B : Banana) (A : Apple) (C : Cherry)
key만 또는 value만 반복하고 싶으면 아래처럼 해주면 된다.
for key in dict.keys {
print(key)
}
forEach
반복 실행하려는 코드를 파라미터로 받고, 저장된 요소는 클로저 상수로 전달된다.
아래는 print문을 호출하는 클로저를
nums 요소의 개수만큼 반복하는 코드
nums.forEach {
print($0)
}
차이점
for - in문은 직접 구현하는 반복문(스위프트가 제공하는 기본 함수)이고,
forEach는 collection에서 제공하는 기능으로 반복하고 싶은 구문을 forEach라는 함수의 파라미터로 클로저를 작성해서 넘겨줌
그래서 for - in에서는 사용 가능한 continue, break이 forEach에서는 불가능하다.
forEach는 반복문이 아니라, 클로저를 파라미터로 넘겨주는 메소드이다.
for - in은 반복문을 돌다가 return을 만나면 함수 자체가 종료된다.
근데 forEach의 경우, 내가 전달한 클로저를 요소 개수만큼 실행된다.
정리
그래서 결론은
반복문과 클로저(함수) 차이임
우선, 반복문은 인덱스로 접근이 가능함
글고, 내가 forEach를 처음 쓸 수 있게 된 게 친구 코드를 보고 나서부터인데
그 친구에게 물어보니 모든 요소를 건너뛰지 않고 반복하겠다는 의미를 줄 때는 forEach를 쓰겠다고 했다.
'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글
[iOS] cell shadow + cornerRadius 같이 주는 방법 (0) | 2022.07.21 |
---|---|
[iOS] Enum으로 코드 리팩토링 (0) | 2022.07.19 |
[iOS] Formatted API in iOS15 (0) | 2022.07.13 |
[iOS] Copy items if needed, Move to Trash (0) | 2022.07.13 |
[iOS] Rendering Mode, Build Phases, NavigationController, TabBarController (0) | 2022.07.11 |