스위프트 제어문(Swift flow Control)
아이폰의 앱을 만들 수 있는 언어로써 스위프트(Swift)는 그 전의 개발 언어였던 Objective-C를 많이 보완한 프로그래밍 언어입니다. 아직까지 Objective-C 를 사용해 앱을 만들 수 있지만, 애플은 스위프트를 공식 개발언어로 지정하고 보급에 힘쓰고 있습니다. 스위프트 역시 프로그래밍의 기본이 되는 제어문이 있는데요. Objective-C를 계승해 그 문법은 비슷합니다.
If
흔히 조건문이라고 불리는 프로그램의 흐름을 제어하는 함수입니다. 조건을 판별해서 그에 맞는 처리를 할 수 있습니다. 사용법이 간단합니다.
let a = 10, b = 10
let isSame = a == b //조건, a 와 b 의 값이 같으면 true, 다르면 false 가 변수에 담김
if isSame {
print("A 와 B는 같습니다.")
}
기본적인 형태입니다. if 에 직접 조건을 줄 수도 있고 위 예제처럼 변수에 조건을 담아 사용할 수도 있습니다.
let a = 20, b = 10
let isSame = a == b
if isSame {
print("A 와 B는 같습니다.")
}
else if a > b { //a 와 b가 같지 않은 경우, 이 조건도 확인
print("A가 B보다 더 큽니다.")
}
else if 를 사용해서 다른 경우를 만족할 때도 처리할 수 있습니다. 위 예제에서는 a 의 값이 20으로 바뀌었군요. else if 의 조건을 확인합니다.
let a = 20, b = 30
let isSame = a == b
if isSame {
print("A 와 B는 같습니다.")
}
else if a > b {
print("A가 B보다 더 큽니다.")
}
else { //위 조건이 모두 아닌 경우
print("B가 A보다 더 큽니다.")
}
마지막 else 를 이용해 위의 조건이 모두 만족하지 않는 경우를 처리할 수 있습니다.
Switch
If 와 함께 많이 사용되는 제어문입니다. 그런데 스위프트에서 Switch 는 다양한 기능들이 많아 잘 알아둔다면 실제 앱을 만드는 과정에서도 유용하게 사용할 수 있습니다.
let score = 100
switch score { //조건
case 50:
print("50점 입니다.")
case 80, 100: //,(쉼표) 를 사용해 2가지 이상의 case 를 처리할 수 있습니다.
print("80점 또는 100점 입니다.")
default:
print("50점이 안됩니다.")
}
가장 기본적인 형태로 키워드 case 와 default 로 사용할 수 있습니다. 각 case 에 따라 분기 처리할 수 있으며, 모든 조건을 만족하지 않는 경우를 대비해 default 를 사용해야 합니다. 단, 모든 경우를 처리할 수 있다면 default 는 쓰지 않아도 괜찮습니다.
switch score {
case 10...30: //ClosedRange : 마지막 번호를 포함
print("10점 이상 30점 이하입니다.")
case 40..<60: //halfClosedRange : 마지막 번호를 포함하지 않음
print("60점 미만입니다.")
case 60..<80:
print("60점 이상 80점 미만입니다.")
case 80...100:
print("80점 이상 100점 이하입니다.")
default:
print("10점 아래입니다.")
}
범위를 지정해서 분기처리할 수 있습니다. 단순히 값을 판별하는 것보다 더 다양한 패턴으로 조건을 확인, 처리할 수 있습니다.
let iTuple = (25.234, 31.042) //튜플도 조건으로 줄 수 있음
switch iTuple {
case (25.001...25.250, 31.001...31.100): //튜플 + halfClosedRange
print("좌표 \(iTuple)는 근처입니다.")
default:
print("범위를 벗어났습니다.")
}
단일 값이 아닌 튜플을 조건으로 사용할 수도 있고 이 또한 범위를 지정해 처리할 수 있습니다.
let ab = (10, 20)
switch ab {
case let (x, y) where x == y: //각 값에 변수를 할당해 바인딩 할 수 있음
print("\(x)와 \(y)의 값은 같습니다.")
case let (x, y) where x != y: //또한, where 를 이용해 두 값의 관계를 확인할 수 있음
print("\(x)와 \(y)의 값은 다릅니다.")
case let (x, y):
print("\(x)와 \(y) 는 아무런 관계가 없습니다.")
}
튜플로 값을 주었을 때, 각 값에 변수를 할당하고 사용할 수 있습니다. 그리고 키워드 where 를 덧붙여서 두 값의 관계를 확인하여 조건에 맞는 처리를 할 수도 있습니다.
감사합니다.