Swift 둘러보기 (A Swift Tour) - 제어 흐름 (Control Flow)

00yhsp·2024년 3월 19일

조건문 - 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문에서 조건식은 반드시 불리언으로 표현되어야 한다.

  • 즉, if score { ... }과 같은 코드는 implicit하게 0과 비교하는 것이 아닌 에러.

조건을 기준으로 값을 선택하기 위해 할당의 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는 모든 종류의 데이터와 다양한 비교 작업을 지원한다.

  • Integer 및 Equality 비교로 제한되지 않는다
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"
profile
iOS Dev

0개의 댓글