Swift로 알고리즘을 풀어보면서 파이썬만큼은 아니지만 편리한 도구들을 많이 마련해 놓았다는 생각이 드는데요. 오늘은 그 중에서 지정한 For-Loop 를 한번에 break 하는 방법을 소개드리려고 합니다 :)
사실 이런 것들은 있는 줄 몰라서 못쓰는 것들이 대부분이잖아요? 이런 도구들을 틈틈히 정리해보려고 합니다!
그냥 아무런 쓸 때 없는 3중 For-Loop를 만들어볼게요.
for i in 1...10 {
// 첫번째 Loop
for j in 1...10 {
// 두번째 Loop
for k in 1...10 {
// 세번째 Loop
print(i, j, k)
}
}
}
여기서 만약에 특정 조건일 때 두번째 Loop에서 break 하고 싶으면 어떻게 해야 할까요?
여기서는 i, j, k가 모두 같을 때 break한다고 해볼게요!
저는 예전에는 breakFlag라는 Bool 값을 만들어서, 해당 for문까지 종료를 해주곤 했었는데요.
이렇게요!
for i in 1...10 {
var breakFlag = false // break Flag는 첫번째 for문에서 초기화된다.
for j in 1...10 {
for k in 1...10 {
print(i, j, k)
if i == j && j == k {
breakFlag = true // 조건이 일치하면 true로 바꿔주고 세번째 for문 종료
break
}
if breakFlag { break } // true로 바뀌었기 때문에 상위 두번째 for문도 종료된다.
}
}
}
하지만 이렇게 번거로운 작업 없이도 한번에 밖의 for문을 종료시키는 방법이 있습니다.
바로 Loop레이블을 사용하는 방법인데요.
Loop레이블로 Loop에 이름을 붙인 후 해당 Loop를 바로 종료시킬 수 있는 방식입니다.
한번 보여드릴게요!
다음과 같이 Loop의 이름을 지정하고, 지정한 Loop 이름을 break 뒤에 붙이면 해당 Loop를 종료시킬 수 있어요.
firstLoop:
for i in 1...10 {
secondLoop:
for j in 1...10 {
thirdLoop:
for k in 1...10 {
print(i, j, k)
if i == j && j == k {
break secondLoop
}
}
}
}
별거 아니지만, 일일히 변수 만들거나 조건 붙여서 끝내는 것보다 훨씬 간단하고 빠른 방법인 것 같습니다ㅎㅎ
'iOS 개발 > Swift' 카테고리의 다른 글
[ARC] 성능을 위해 unowned를 꼭 써야할까? (0) | 2023.02.03 |
---|---|
[ARC] Lazy 변수 클로저에서 Unowned 캡처가 항상 안전할까? (0) | 2023.02.02 |
[Concurrency] Semaphore로 비동기적 이벤트를 동기적으로 발생시키기 (0) | 2023.01.20 |
[ARC] 약한참조(Weak, Unowned)에 대해서 (0) | 2022.11.06 |
[Swift] Stride 함수를 사용하자 (0) | 2022.10.02 |
[Swift] appDelegate 참조 안전하게 하기 (0) | 2021.11.10 |
[Swift] lazy 변수란? - 애플개발자 문서가 수정됐다! (0) | 2021.09.06 |
[Swift] 프로토콜(Protocol)을 가장 기초부터 (2) | 2021.09.02 |