티스토리 뷰

728x90

Control Flow

Swift에서는 while, if guard, switch, for-in 문 등 많은 제어문을 제공합니다.

 

내용이 많아 2개로 나눠서 정리해보려고 합니다 

조건문은 따로 정리할게요 !

 

For-in Loops

for-in 문은 배열, 숫자, 문자열을 순서대로 순회 하기 위해 사용합니다.

let names = ["Roy", "Daisy", "Lily", "Jason"]
for name in names {
    print("Hello, \(name)!")
}

// Hello, Roy!
// Hello, Daisy!
// Hello, Lily!
// Hello, Jason!
 
 

dictionary에서 반환된 key-value 로 구성된 튜플을 순회하며 제어할 수도 있습니다.

※ dictionary에 담긴 콘텐츠는 정렬 되지 않은 상태입니다.

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// ants have 6 legs
// spiders have 8 legs
// cats have 4 legs

 

 

숫자 범위를 지정해 순회할 수 있습니다.

for index in 1...5 {
    print("\(index) times 5 is \(index * 5)")
}

// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

 

 

for-in 문을 순서대로 제어할 필요가 없다면, 변수자리에 _ (underscore)키워드를 사용해 성능을 높일 수 있습니다. 

let base = 3
let power = 10
var answer = 1

for _ in 1...power {
    answer *= base
}

print("\(base) to the power of \(power) is \(answer)")
// 3 to the power of 10 is 59049

 

 

범위 연산자와 사용할 수도 있습니다.

let minutes = 60
for tickMark in 0...minutes {
  // tickmark가 60번 찍힘
}

 

 

stride(from:to:by:)  메소드로 구간별로 설정할 수 있습니다.

(from부터 to 보다 작게 by 간격으로) 

구간을 5로 설정.

let minutes = 60
let minuteInterval = 5
for tickMark in stride(from: 0, to: minutes, by: minuteInterval) { // 0부터 60보다 작은 수를 5의 간격으로
    print(tickMark)
    // 0, 5, 10 ... 55
}

 

stride(from:through:by:) (from 부터 through 까지 by 간격으로)

구간을 3으로 설정

let hours = 12
let hourInterval = 3
for tickMark in stride(from: 3, through: hours, by: hourInterval) { // 3부터 12까지 3의 간격으로
    print(tickMark)
    // (3, 6, 9, 12)
}

 


 

While문 (While Loops)

while 루프는 조건이 거짓이 될 때까지 명령문을 수행합니다.

Swift에서는 whilerepeat-while 두 가지 종류의 while문을 지원합니다.

 

사용법

while condition {
    statements
}

 

while 문 예시

var arrInt = [Int]()              // []
var numberCount: Int = 0          

while arrInt.count < 7 {
    print(arrInt)
    arrInt.insert(numberCount, at: arrInt.endIndex)
    numberCount += 1
}
//  []
//  [0]
//  [0, 1]
//  [0, 1, 2]
//  [0, 1, 2, 3]
//  [0, 1, 2, 3, 4]
//  [0, 1, 2, 3, 4, 5]

위 코드를 설명하자면 

빈배열을 담는 변수 arrInt와 Int를 갖는 변수 numberCount를 선언하고

arrInt.count가 7미만 일때까지

numberCount의 값을  1씩 증가시키고

arrInt 배열에numberCount의 값을 하나씩 넣으면서 루프를 돌립니다.

 

 

Repeat-While 문

repeat-while 문은 다른 언어의 do-while과 유사합니다.

 

사용법

repeat {
    statements
} while condition

 

repeat-while 문 예시 (while과 차이를 잘 모르겠다.. 순서가 바뀐정도?)

 

repeat {
    print(arrInt)
    arrInt.insert(numberCount, at: arrInt.endIndex)
    numberCount += 1
} while arrInt.count < 7  // 조건이 true 이면 repeat scope로 이동

//  []
//  [0]
//  [0, 1]
//  [0, 1, 2]
//  [0, 1, 2, 3]
//  [0, 1, 2, 3, 4]
//  [0, 1, 2, 3, 4, 5]

 


 

728x90