일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 멤버변수
- 스택 자바 코드
- ar vr 차이
- 서비스 쓰레드 차이
- 플러터 설치 2022
- rxjava cold observable
- 서비스 vs 쓰레드
- rxjava hot observable
- ANR이란
- android retrofit login
- 객체
- jvm이란
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 사용법
- android ar 개발
- 2022 플러터 설치
- Rxjava Observable
- 안드로이드 유닛테스트란
- 안드로이드 os 구조
- jvm 작동 원리
- 스택 큐 차이
- 자바 다형성
- 안드로이드 유닛 테스트
- 큐 자바 코드
- 안드로이드 라이선스
- 클래스
- rxjava disposable
- 안드로이드 레트로핏 crud
- 안드로이드 라이선스 종류
- 2022 플러터 안드로이드 스튜디오
- Today
- Total
나만을 위한 블로그
[Swift] 반복문 (for-in, while, repeat-while) 본문
조건문 다음은? 반복문 볼 차례다.
Documentation
docs.swift.org
아래 코드는 for-in을 써서 배열의 항목을 반복한다
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
딕셔너리를 반복해서 키-값 쌍에 접근할 수도 있다. 딕셔너리가 반복될 때 각 항목은 (키, 값) 튜플로 바뀌며 for-in의 본문 안에서 쓰기 위해 (키, 값) 튜플의 멤버를 명시적으로 명명된 상수로 분해할 수 있다. 아래 예시에서 딕셔너리의 키는 AnimalName이란 상수로 분해되고 값은 LegCount 상수로 분해된다
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
print("\(animalName)s have \(legCount) legs")
}
// cats have 4 legs
// ants have 6 legs
// spiders have 8 legs
딕셔너리의 내용은 본질적으로 순서가 없기 때문에 반복된다고 검색 순서가 보장되진 않는다...(중략)...숫자 범위에 for-in을 쓸 수도 있다
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
시퀀스의 각 값이 필요하지 않다면 변수명 대신 밑줄을 써서 값을 무시할 수 있다
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// Prints "3 to the power of 10 is 59049"
for문의 형태는 for 뒤에 인덱스 변수를 쓰고 in을 쓴 다음, in 오른쪽에 범위를 넣는 형태다.
범위의 경우 코틀린과 차이나는 부분, 유사한 부분이 보인다.
- 폐쇄 범위 연산자를 ...으로 표현한다. 코틀린은 ..으로 점 1개 차이다
- 스위프트에서 반복문 안에 "..<" 기호를 쓰면 범위의 마지막 인덱스(=상한)은 포함하지 않고 반복한다. 코틀린도 마찬가지로 "..<" 기호를 써서 상한을 포함하지 않는 범위를 만들어 반복할 수 있다
다음은 while 문이다. 스위프트의 while 반복문은 while, repeat-while 2가지 있다.
Documentation
docs.swift.org
while 루프는 단일 조건을 평가해서 시작한다. 조건이 true면 false가 될 때까지 반복한다
Documentation
docs.swift.org
repeat-while 루프는 루프 조건을 고려하기 전에 먼저 루프 블록을 통해 단일 패스를 수행한다. 그 후 조건이 false가 될 때까지 반복한다
자바/코틀린을 이미 안다면 repeat-while의 설명을 보고 곧바로 do-while과 비슷하다는 생각을 했을 것이다.
사실 스위프트의 repeat-while은 자바/코틀린의 do-while과 동일하게 작동한다. 이름과 사용법만 조금 다를 뿐이다.
아래는 간단한 while문의 사용 예시다.
var count = 0
while count < 5 {
print("count : \(count)")
count += 1
}
print("이제 count는 5보다 작지 않습니다 : \(count)")
// count : 0
// count : 1
// count : 2
// count : 3
// count : 4
// 이제 count는 5보다 작지 않습니다 : 5
혹시 첫 프로그래밍 언어가 스위프트라면 잘 모를 수 있으니 위 코드의 작동 순서를 적는다.
- 처음부터 0이란 정수값을 가진 count 변수를 만든다. var로 선언했기 때문에 count 변수에 들어있는 값은 변할 수 있다
- count가 5보다 작은 동안에만 while 블록 내부 코드가 반복하게 조건을 설정한다
- 중괄호 안에 실행할 코드를 적는다. 여기선 현재 count 변수에 담긴 값이 뭔지 출력한 다음 count 변수에 1을 더한다. 처음 count 변수에 0이 들어있었으니 0을 출력한 뒤 1을 더해서 count 변수에는 1이 담긴다
- count += 1 코드가 호출됐으니 조건으로 돌아가서 count가 5보다 작은지 확인한다. 1은 5보다 작기 때문에 조건은 true가 되고 다시 count 변수를 출력한다
- "count : 1"이 출력되고 다시 count 변수에 1을 더한다. 1+1은 2기 때문에 이 직후 count 변수에는 2가 담기게 된다
- 다시 조건으로 돌아가서 5보다 작은지 확인한다
- 1~6번을 반복한 끝에 count가 5가 된 경우 while의 조건은 false가 된다. while의 조건(count < 5)이 false가 되면 while 루프는 더 이상 작동하지 않고 닫는 중괄호 밖으로 코드 제어권이 이동한다
- 닫는 중괄호 바로 다음에 위치한 코드는 "이제 count는 5보다 작지 않습니다"를 출력하는 print 함수기 때문에 이 코드가 호출되며 프로그램이 종료된다
백문이 불여일견이다. count +=1 밑에 print를 둬서 count 변수에 1이 더해지는 시점이 언제인지도 확인해 보자.
Xcode를 사용 중이라면 중단점을 찍어서 위 코드의 전체 동작이 어떻게 되는지 확인해 보면 좋다. while의 여는 중괄호부터 닫는 중괄호 이후의 print 함수까지 중단점을 찍고 실행하면 될 것이다.
아래는 간단한 repeat-while문의 사용 예시다.
var num = 0
repeat {
print("num : \(num)")
num += 1
} while num < 5
print("repeat-while 종료. num : \(num)")
// num : 0
// num : 1
// num : 2
// num : 3
// num : 4
// repeat-while 종료. num : 5
while과 비교하면 조건을 적는 부분, 반복할 코드를 적는 부분의 위치가 서로 뒤바뀌었다는 차이가 있다. 0~4까지만 반복하고 5가 되면 반복문을 탈출해서 5를 출력하고 프로그램이 종료된다는 흐름은 둘 다 동일하다.
'iOS > Swift' 카테고리의 다른 글
[Swift] 클래스와 구조체 (0) | 2024.02.11 |
---|---|
[Swift] 조건문 (if, switch) (0) | 2024.01.15 |
[Swift] 변수와 상수, 자료형 (0) | 2024.01.14 |
[Swift] Swift란? (0) | 2024.01.11 |