흐름제어 - 반복문

hoBahk·2021년 6월 28일
0

1. for-in 구문

for-in 반복 구문은 반복적인 데이터나 시퀀스를 다룰 때 많이 사용한다.

for 임시상수 in 시퀀스아이템{
실행코드
}

ex) for-in 반복 구문의 활용

for i in 0...2 {
   print(i)
}
//0
//1
//2

for i in 0...5 {
   if i.isMultiple(of: 2){
       print(i)
       continue
   }
   print("\(i) 홀수")
}
//0
//1 홀수
//2
//3 홀수
//4
//5 홀수

let helloSwift: String = "Hello Swift"

for char in helloSwift{
   print(char)
}
//S
//w
//i
//f
//t

var result: Int = 1

//시퀀스에 해당하는 값이 필요 없다면 와일드카드 식별자(_)를 사용
for _ in 1...3{
   result *= 10
}

print("10의 3제곱은 \(result)")

ex) 기본 데이터 타입의 for-in 반복 구문 사용

//Ditionary
let friends: [String: Int] = ["A": 10, "B": 20, "C":30]

for tuple in friends{
    print(tuple)
}
//("A": 10)
//("B": 20)
//("C": 30)
let 주소: [String: String] = ["시": "서울특별시", "시군구": "성동구", "동읍면": "용답동" ]

for (키, 값) in 주소{
    print("\(키): \(값)")
}
//시군구: 성동구
//동읍면: 용답동
//시: 서울특별시

//Set
let 지역번호: Set<String> = ["02", "031", "032", "033", "041", "042", "043", "051", "052", "053", "054", "055", "061", "062", "063", "064"]

for 번호 in 지역번호{
    print(번호)
}

//02
//031
//032
//033
//....

2. while 구문

while과 repeat-while의 사용법은 다른 프로그래밍언어의 사용법과 다르지 않다.
repeat-while은 다른 언어의 do-while과 같은 역할을 한다.

ex) while 반복 구문의 사용

var names: [String] = ["A", "B", "C", "D"]

while names.isEmpty == false {
    print("bye_\(names.removeFirst())")
    // removeFirst()는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.
}
//bye_A
//bye_B
//bye_C
//bye_D

ex) repeat-while 반복 구문의 사용

var names: [String] = ["A", "B", "C", "D"]

repeat {
    print("bye_\(names.removeFirst())")
    // removeFirst()는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.
}while names.isEmpty == false
//bye_A
//bye_B
//bye_C
//bye_D

3. 구문 이름표

반복문을 작성하다 보면 종종 반복문을 중첩으로 작성하게 된다. 이때 반복문을 제어하는 키워드(break, continue 등)가 어떤 범위에 적용되어야 하는지 애매하거나 큰 범위의 반복문을 종료하고 싶은데 작은 범위의 반복문만 종료되는 등 예상치 못한 실수를 할 수도 있다.
그럴 때는 반복문 앞에 이름과 함께 콜론을 붙여 구문의 이름을 지정해주는 구문 이름표를 사용하면 좋다.
이름이 지정된 구문을 제어하고자 할 때는 제어 키워드와 구문 이름을 함께 써주면 좋다.

ex) 중첩된 반복문의 구문 이름표 사용

var numbers: [Int] = [3, 2342, 6, 3252]

numbersLoop: for num in numbers{
    if num > 5 || num < 1 {
        continue numbersLoop
    }
    
    var count: Int = 0
    
    printLoop: while true {
        print(num)
        count += 1
        
        if count == num{
            break printLoop
        }
    }
    
    removeLoop: while true{
        if numbers.first != num{
            break numbersLoop
        }
        numbers.removeFirst()
    }
}
//3
//3
//3
//numbers에는 [2342, 6, 3252]가 나음

ex) 중첩된 반복문의 구문 이름표 사용2

var numbers: [Int] = [3, 4, 2342, 6, 3252]

numbersLoop: for num in numbers{
    if num > 5 || num < 1 {
        continue numbersLoop
    }
    
    var count: Int = 0
    
    printLoop: while true {
        print(num)
        count += 1
        
        if count == num{
            break printLoop
        }
    }
    
    removeLoop: while true{
        if numbers.first != num{
            break removeLoop
        }
        numbers.removeFirst()
    }
print(numbers)
}

//3
//3
//3
//[4, 2342, 6, 3252]
//4
//4
//4
//4
[2342, 6, 3252]
profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글