조건문 - if / switch
루프 - for-in / while / repeat-while
조건문이나 루프 변수를 둘러싼 소괄호는 선택사항이며 중괄호는 필수사항이다.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
// Prints "11"
if문에서 조건식은 반드시 불리언으로 표현되어야 한다.
조건을 기준으로 값을 선택하기 위해 할당의 equal sign(=) 뒤나 return 뒤에 if 또는 switch를 작성할 수 있다.
let scoreDecoration = if teamScore > 10 {
"🎉"
} else {
""
}
print("Score:", teamScore, scoreDecoration)
// Prints "Score: 11 🎉"
if와 let을 사용하여 누락될 수 있는 값을 사용할 수 있다.
이러한 값을 옵셔널(optional) 이라고 한다.
옵셔널 밸류는 값을 포함하거나 값이 없음을 나타내는 nil을 포함한다.
옵셔널로 값을 표시하기 위해 타입 뒤에 물음표(?)를 작성한다.
var optionalString: String? = "Hello"
print(optionalString == nil)
// Prints "false"
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
옵셔널 값이 nil이면 조건은 False이고 중괄호 안 코드는 건너뛰게 된다.
옵셔널 값이 nil이 아니면 옵셔널 값이 언래핑되고 let 뒤의 상수로 할당되어 코드 블럭 안에서 언래핑 된 값으로 사용할 수 있다.
옵셔널 값을 처리하는 다른 방법은 ?? 연산자를 사용하여 기본값을 제공하는 것이다.
let nickname: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickname ?? fullName)"
더 짧게 같은 이름으로 언래핑 된 값을 사용할 수 있다.
if let nickname {
print("Hey, \(nickname)")
}
// Doesn't print anything, because nickname is nil.
switch는 모든 종류의 데이터와 다양한 비교 작업을 지원한다.
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
// Prints "Is it a spicy red pepper?"
for-in을 사용하여 딕셔너리의 항목을 조회한다.
딕셔너리는 순서가 없는 콜렉션이므로 키와 값은 임의 순서로 조회된다.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
// Prints "25"
조건이 바뀔 때 까지 코드 블럭을 반복하려면 while을 사용해야 한다.
repeat-while은 c의 do-while과 같음
var n = 2
while n < 100 {
n *= 2
}
print(n)
// Prints "128"
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
// Prints "128"
인덱스의 범위를 만들기 위해 ..< / ...을 사용할 수 있다.
..<의 경우 최상위 값을 생략하고, ...의 경우 포함한다.
var total = 0
for i in 0..<4 {
total += i
}
print(total)
// Prints "6"