스위프트 투어 - 제어 흐름 Swift


제어 흐름

조건을 만드려면 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)

if 문장에서의 조건은 반드시 불린 표현이어야 한다. if score { ... } 는 에러이며 0과의 비교가 아니다.

if 와 let 을 함께 사용해 빠질수 있는 값들과 함께 작업한다. 이들 값들은 옵셔널로 표현된다. 옵셔널 값은 값을 포함하거나 값이 비어있음을 표현한다. 값의 형식뒤에 ? 마크를 사용하여 이 값이 옵셔널임을 나타낼 수 있다.

var optionalString: String? = "Hello"
print(optionalString == nil)

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
  greeting = "Hello, \(name)"
}

만약 옵셔널 값이 닐이면 조건은 거짓이되고 브레이스내의 코드는 스킵된다. 그렇지 않으면 옵셔널내의 값이 let뒤의 상수에게 할당되며 코드의 블럭 내에서 값으로 사용될 수 있다.

옵셔널 값을 사용하는 다른 방법은 ?? 연산자를 사용해 기본값을 제공하는 것이다. 만약 옵셔널 값이 빠지면 기본값이 대신 사용된다.

let nickName:String? = nil
let fullName:String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"

스위치는 어떤 형식의 데이터든 지원하고 다양한 비교 연산을 수행할 수 있다. 이 것은 정수나 같은지 여부로만 한정되지 않는다.

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.")
}

어떻게 let 이 패턴에 사용되고 상수에 매치될 수 있는지 확인한다.

키 값 패어를 위해 이름의 페어를 제공함으로서 딕셔너리내의 값들을 열거하는데 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 (kind, numbers) in interestingNumbers {
  for number in numbers {
    if (number > largest) {
      largest = number
    }
  }
}
print(largest)

조건이 변화할 때까지 코드의 블럭을 반복하려면 while 을 사용한다. 루프의 조건이 끝에 올 수도 있는데 루프를 적어도 한 번 실행해야 할때이다.

var n = 2
while n < 100 {
  n *= 2
}
print(n)

var m = 2
repeat {
  m *= 2
} while m < 100

루프내의 인덱스를 ..< 를 사용해 인덱스 범위를 사용할 수 있다.

var total = 0
for i in 0..<4 {
  total += i
}
print(total)

..< 를 사용해 범위를 만들고 최상위값은 제외하거나 ... 를 사용해 양쪽값을 모두 포함하는 범위를 만든다


덧글

댓글 입력 영역