For-In Loops
Syntax
for loopConstant in Range {
statements
}
for loopConstant in Collection {
statements
}
loopConstant는 바꿀 수 없다.
Range만큼 Statements를 반복한다.
for index in 1 ... 3 {
print("hello")
}
결과
hello
hello
hello
index는 선언이후 사용하지 않았기 때문에 warning이 표시된다.
이런 경우 index를 '_'로 대체하여 사용할 수 있는데 이를 wildcard pattern이라고 한다.
변형
for _ in 1 ... 3 {
print("hello")
}
wildcard pattern은 위와 같이 변형해서 사용할 수 있다
let count = 10
var result = 1
for _ in 1 ... count {
result *= 2
}
result
결과
1024
wildcard pattern을 사용하면 코드의 가독성이 좋아지고, 내부적으로도 효율적으로 실행된다.
Swift에서 짝수나 홀수의 반복 구현하기
C 계열의 언어와 다르게 단순 범위만 제공하기에 아래와 같은 방식으로 코드를 작성할 수 없음
void main() {
for(i=1;i<=10;i+=2) {
printf("%d\n", i)
}
}
결과
2
4
6
8
10
따라서 stride 함수를 통해 다음과 같이 구현해야 한다.
//stride thrrough
for num in stride(from: 0, through: 10, bt: 2) { //num을 0에서 10까지 2씩 건너 뛰며 반복
print(num)
}
결과
0
2
4
6
8
//stride to
for num in stride(from: 0, to: 10, bt: 2) { //num을 0에서 9까지 2씩 건너 뛰며 반복
print(num)
}
결과
0
2
4
6
8
결과에서 보다싶이 stride의 to는 through와 다르게 upperbund에 포함되지 않음에 유의해야 한다.
list = [1, 2, 3]
for contents in list {
print(contents)
}
결과
1
2
3
Collection을 range 대신에 넣게 되면 collection을 순환하게 된다.
While Loops
Syntax
while condition {
statements
}
if와 다르게 condition에 따라 반복 횟수가 변하기 때문에 예측하기 어렵다.
따라서 무한 loop에 빠지지 않도록 조심해야 한다.
var num = 1
var sum = 0
while num <= 100 {
sum += num
}
sum
결과
//무한 loop
num은 반복 횟수에 상관 없이 항상 1 이므로 항상 true를 반환하며, 따라서 무한히 반복한다.
주의하도록 하자.
var num = 1
var sum = 0
while num <= 100 {
sum += num
num += 1
}
sum
결과
5050
repeat-while
Syntax
repeat {
statements
} while condition
var num = 100
while num < 100 {
num += 1
}
print(num)
num = 100
repeat {
num += 1
} while num < 100
print(num)
결과
100
101
statements를 실행 하고 이후에 condition을 체크하기 때문에,
condition을 먼저 체크하고 statements를 실행하는 while문과는 결과가 달라질 수 있다.
Log
2021.08.06.
블로그 이전으로 인한 글 옮김 및 수정
'학습 노트 > Swift (2021)' 카테고리의 다른 글
043 ~ 048. Optionals (0) | 2021.08.11 |
---|---|
039 ~ 042. Control Transfer Statements, Labeled Statement (흐름 제어 문) (0) | 2021.08.06 |
032 ~ 036. Conditional Statements (조건문) (0) | 2021.08.06 |
020 ~ 031. Operator (연산자) + 실습 (0) | 2021.08.04 |
012 ~ 019. literal과 datatype (0) | 2021.08.01 |