조건문
let num1 = 13
let num2 = 5
let sum1 = num1 + num2
if sum1 > 10 {
print("over 10")
} else {
print("not over 10")
}
3+5 = 8 이 10보다 작기때문에 over10은 출력되지않는다.
8이 을 넘지 못하기 때문에 not over 10이 출력된다
만약 num1을 13으로 바꾸면 합이 10을 넘기때문에 over10이 출력된다
let age1 = 15
let age2 = 25
if age1 > 19 && age2 > 19 { //and는 양쪽이 모두 조건문에 해당될때 트루가 되는 형태
print("19세 이상 영화를 같이 볼수 있겠네요")
} else {
print("19세 이상 영화를 같이 볼수 없겠네요")
}
if age1 > 20 || age2 > 20 { //or는 양쪽중에 한개만 만족해도 트루가 되는 형태
print("20세 이상 보호자가 있으면 놀이공원에 들어갈수 있어요")
} else {
}
둘중에 한명이 20세를 넘으니까 그대로 출력된다
switch문
switch 문은 여러 가지 가능한 값 또는 조건에 따라 실행할 코드를 효과적으로 선택하는 데 사용된다
enum Direction {
case up
case down
case left
case right
}
let direction = Direction.up // direction을 down으로 할당해놓은거, up을 할당해놓으면 up이 출력된다. 나머지 레프트 라이트도 가능
switch direction {
case .up: //속성을 이용하기위해서 .을 찍는다
print("up")
case .down:
print("down")
case .left:
print("left")
case .right:
print("right")
}
간단한 예제
let dayOfWeek = 0
switch dayOfWeek {
case 1:
print("Sunday")
case 2:
print("Monday")
case 3:
print("Tuesday")
case 4:
print("Wednesday")
case 5:
print("Thursday")
case 6:
print("Friday")
case 7:
print("Saturday")
default:
print("Invalid day")
}
dayofweek의 변수값은 3
switch문은 3을 case의 값과 비교하고 3일경우 tuesday가 출력
만약 case에 적힌 숫자가 없을경우 invalid day가 출력
guard문
if문과 마찬가지로 주어진 표현식의 결과가 참인지 거짓인지에 따라 실행여부를 결정짓는 방식의 조건문
guard 문은 Swift에서 조건이 만족되지 않을 때 조기에 빠져나가는 제어 구문, 주로 함수나 메서드 내에서 조건을 검사하여 조건이 거짓일 경우 빠르게 종료하는데 사용됨
/
guard condition else {
조건이 거짓인 경우 실행할 코드
일반적으로 return, throw, fatalError() 등을 사용하여 함수를 종료
}
조건이 참인 경우 여기서 계속 실행
/
왜 guard문을 사용하냐 ? guard 문은 코드를 더욱 안전하고 가독성 있게 만들어주며, 불필요한 코드 실행을 방지하는데 도움이 됩니다.
가져오려는 값을 더욱 안전하게 ? , !대신에 사용할때 사용한다고 생각
반복문
for ~ in문
swift 에서 어떤 코드를 반복해서 수행할수 있는 메커니즘이 있음 → 그게 바로 loop
그중에서 for loop를 이용해서 array, range 를 돌면서 코드를 반복 수행할수 있음
range는 수의 어떤 범위를 표현하는 타입
Range를 사용한 반복문
let numRange = 1...10
for num in numRange {
print("num is \(num)")
}
여기서 numRange은 1부터 10까지의 범위를 나타내고 . 1...10은 1부터 10까지의 값을 포함하는 범위를 정의하는 것을 의미, 따라서 반복문을 통해 num 변수에 순차적으로 1부터 10까지의 값이 대입되며, 각각의 숫자에 대한 출력이 이루어짐
Array을 사용한 반복문
let names = ["John", "Kevin", "Jason"]
for name in names {
print("name is \(name)")
}
여기서 names는 문자열 배열로, 세 명의 이름을 포함, for-in 반복문을 사용하여 배열의 요소들을 순차적으로 name 변수에 대입, 각 이름에 대한 출력을 수행
while문
앞에서 살펴본 for ~ in 구문은 미리 정의된 실행 횟수만큼만 반복하지만 while 구문은 단순히 주어진 조건식의 결과가 false가 될 때까지 실행 구문을 계속 반복 수행 다시 말해서 while 구문은 '조건을 만족하는 동안은 계속 실행'되는 것으로 이해
for ~ in 구문과 비슷하게 코드를 반복하는 특성이 있기 때문에 종종 어떤 상황에서 무엇을 사용해야하는지 헷갈리는데 for ~ in 구문은 while 구문으로 쉽게 변경할 수 있지만, 반대로 while 구문이 필요한 상황을 for ~ in 구문으로 처리하는 것은 쉽지 않기 때문에 while 문을 사용해야 하는 상황만 정확하게 정리해두면 이해하기 좋다.
while문은 실행횟수가 명확하지 않을때, 직접실행해보기 전까지는 실행횟수를 결코알수없을때, 실행횟수를 기반으로 할수없는 조건일때 사용함
while <조건식> {
<실행할 구문>
}
조건식은 무조건 참이나 거짓으로 결과값을 반환해야한다
조건식의 값이 true일때 코드가 반복해서 수행하지만 false를 반환하면 그 즉시 반복문은 실행종료되고 코드블록을 빠져나가 다음에 이어지는 구문을 실행하게됨
var q = 2
while q < 1000 {
q = q * 2
}
print("q = \(q)")
위의 코드는 q변수를 2로 선언하고 q가 1000보다 작은 동안에 q를 2배씩 곱해나가는 반복문
반복문의 시작될때 q는 2
처음 반복했을때 q는 4가되고
두번 반복했을때 8이되고
q가 1000이상 될때까지 계속 반복하면 q값은 1024가 된다 그러면 while문이 종료된다
while문에 조건식 대신 true값을 직접 넣으면 계속 반복 실행되는 무한루프가 만들어진다
break문을 넣어주지않으면 영원히 실행블록을 반복하게 된다
repeat ~ while 구문
repeat {
<실행할 구문>
}
while <조건식>
while구문과 달리 repeat ~ while구문은 일단 코드를 실행하고 조건식을 평가하고 반복여부를 결정
실행블록의 수행을 최소 한번 보장하는 특성을 갖고있는데 이 점이 while구문과 결정적인 차이
while구문은 조건식을 먼저 평가하여 false가 반환되면 실행블록을 아예 수행하지않음
비교해 보자면
var n = 1024
while n < 1000 {
n = n * 2
}
print("n = \(n)")
변수값을 1024 입력한 다음 while(반복문을 실행하면) 1024는 n<1000조건을 만족하지 못해서 false가 된다 그래서 내부에 있는 n = n * 2 구문은 실행도 못하고 종료가 되고 n의 값은 아무런 변화없이 처음 입력한 그대로 값으로 유지된다
var r = 1024
repeat {
r = r * 2
} while r < 1000
print("r = \(r)")
while repeat구문은 조건을 만족하지 못해도 일단 실행하고 그 값이 나온다