🔘 for-in
- 배열이나 문자열 내의 캐릭터 타입 제어에 사용된다.
- dictionary 타입을 처리할 경우 (키, 값) 튜플을 리턴받아 처리할 수 있다.
- 범위 연산자를 이용하여 특정 인덱스 내에서만 처리할 수 있다.
- 반복될 값이 명시적으로 사용될 필요가 없는 경우
_
로 처리한다.
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// Prints "3 to the power of 10 is 59049
- 특정 범위에서 특정 간격으로 반복을 처리할 경우 s
tride(from:to:by:)
함수를 이용한다.
let minutes = 60
let minuteInterval = 5
for tickMark in stride(from: 0, to: minutes, by: minuteInterval) {
// 0~ 55분까지 매 5분마다 처리를 한다.
}
- 닫힌 범위에 해당하는 함수는
stride(from:through:by:)
이다.
let hours = 12
let hourInterval = 3
for tickMark in stride(from: 3, through: hours, by: hourInterval) {
// 3 ~ 12까지 3시간마다 처리한다(3, 6, 9, 12).
}
🔘 while
- 먼저 조건을 확인하고 코드를 실행하는
while
문과 코드를 먼저 실행하고 나중에 조건을 확인하는repeat-while
문이 있다.
repeat {
statements
} while condition
🔘 switch
- case문에는 범위 값, 튜플, 특정 타입으로의 형변환 처리가지 다룰 수 있다.
- case에 매칭 된 값들은 임시 상수나 변수로 case의 body에 사용될 수 있다.
- 각각의 case에는 복잡한 복잡한 조건식들을 where 절과 함께 사용할 수 있다.
- C나 Objective-C와 달리 case body는 기본적으로 다음 case body로 이어지지 않는다. 즉, break;문에 필요 없다.
- 각각의 case body에는 반드시 실행 가능한 코드가 있어야 한다.
- case에서 2개 이상의 조건을 처리하려고 하면 대상 값을
,
로 이어 표시한다. 이 때 임시 상수/변수에 값을 할당하는 것도 가능하다.
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
print("The letter A")
default:
print("Not the letter A")
}
// Prints "The letter A
// 값 binding도 함께 적용
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
print("(\(x), \(y)) is just some arbitrary point")
}
// Prints "(1, -1) is on the line x == -y
- case문에 범위 연산자를 사용할 수 있다.
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
let naturalCount: String
switch approximateCount {
case 0:
naturalCount = "no"
case 1..<5:
naturalCount = "a few"
case 5..<12:
naturalCount = "several"
case 12..<100:
naturalCount = "dozens of"
case 100..<1000:
naturalCount = "hundreds of"
default:
naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// Prints "There are dozens of moons orbiting Saturn.
- case문에 튜플을 사용할 수 있다.
let somePoint = (1, 1)
switch somePoint {
case (0, 0):
print("\(somePoint) is at the origin")
case (_, 0):
print("\(somePoint) is on the x-axis")
case (0, _):
print("\(somePoint) is on the y-axis")
case (-2...2, -2...2):
print("\(somePoint) is inside the box")
default:
print("\(somePoint) is outside of the box")
}
// Prints "(1, 1) is inside the box
- Swift에서 switch문은 여러개의 case문과 매칭될 수도 있으며 이런 경우 제일 처음의 case body가 실행된다. 위 예제에서 somePoint = (0, 0) 이라면 모든 case에 다 해당이 되나 그 중 처음으로 매칭이 되는 case (0, 0):의 body가 실행된다.
- case문에서 임시 상수/변수에 조건 값을 할당하여 body에서 처리할 수 있다.
let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
print("on the x-axis with an x value of \(x)")
case (0, let y):
print("on the y-axis with a y value of \(y)")
case let (x, y):
print("somewhere else at (\(x), \(y))")
}
// Prints "on the x-axis with an x value of 2
- case문에는 추가 조건을 확인하기 위해 where절을 사용할 수 있다.
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
print("(\(x), \(y)) is just some arbitrary point")
}
// Prints "(1, -1) is on the line x == -y