[swift] while let

이은수, Lee EunSoo·2024년 10월 12일
0

뾰족한스위프트

목록 보기
5/6
post-thumbnail

개요

옵셔널바인딩과 반복문을 동시에 사용하는 방법이 있다. 바로 while-let 이다.

while-let은 옵셔널 바인딩에서 사용한 if-let과 반복문이 합쳐진 형태라고 보면 된다.

소스코드

기본적인 형태

var numbers: [Int?] = [1, 2, nil, 4, nil, 6]

while let number = numbers.popLast() {
    print("Number: \(number)")
}
Number: Optional(6)
Number: nil
Number: Optional(4)
Number: nil
Number: Optional(2)
Number: Optional(1)	

기능으로 놓고 보면 ForEach문과 if-let이 합쳐진 기능에 가깝다.

여러개의 옵셔널바인딩

var numberStrings = ["123", "456", "789", "101112", "131415", "banana"]
var index = 0

while let first = Int(numberStrings[index]),
      let second = Int(numberStrings[index + 1]),
      index < numberStrings.count - 1 {
    print("첫 번째: \(first), 두 번째: \(second)")
    index += 2
}
첫 번째: 123, 두 번째: 456
첫 번째: 789, 두 번째: 101112

위 코드는 배열의 원소를 2개씩 묶어서 출력하는 코드이다.

옵셔널 바인딩으로 인해 int로 변환 불가능해서 nil을 반환하는 원소의 쌍인 경우에는 출력이 안된다.

그리고 let의 바인딩 뒤에 붙은 조건을 보면 알수 있듯 while-let에는 while처럼 조건을 적용하는것이 가능하다.

조건이 붙은 while-let

var numbers: [Int?] = [1, 2, nil, 4, nil, 6]
var index = 0

while let number = numbers[index], number < 4 {
    print("값: \(number)")
    index += 1
}
값: 1
값: 2

이처럼 바인딩의 뒤에 ,로 구분해서 조건을 입력해 준다.

무조건 바인딩 구문 뒤에 와야된다는 점을 유의하자.

응용) 여러줄의 문자열 입력

var inputs: [String] = []
while let command = readLine(), !command.isEmpty {
    inputs.append(command)
}
print(inputs)

백준같은 문제들을 풀다보면 문자열을 여러개 입력받아야 하는 경우가 자주 생긴다.

그럴때 사용하면 유용한 코드인데 readLine()으로 문자열을 입력받되 데이터가 빈 경우에서의 줄바꿈 (=엔터) 가 오면 입력 while-let을 중단하는 구조이다.

정리

옵셔널 바인딩과 반복문이 합쳐진 while-let이 있다.

while-let의 기능은 Foreach와 옵셔널 바인딩이 합쳐진 형태에 가깝다.

동시에 여러개의 바인딩을 하는것도 가능하고, while처럼 조건을 하나 거는것도 가능하다.

위 특징을 이용해서 여러개의 문자열을 입력받아야 하는 경우에도 활용 할 수 있다.

profile
iOS 개발자 취준생, 천 리 길도 한 걸음부터

0개의 댓글