ios/swift

[Swift] String을 Int로 변환할 때 왜 Optional<Int>타입이 될까?

changjaemun 2023. 10. 2. 23:36
let arr = ["2000","09","06"]

arr을 for문으로 Int로 변환하려는 과정에서 생긴 일이다.

import Foundation

let str = ["2000","09","06"]
var newStr:[Int] = []
for i in str{
    newStr.append(Int(i))
}

코드는 이렇게 작성했다. 그런데 사진과 같은 에러 메세지가 나왔다.

엥? 난 옵셔널을 쓴 적이 없는데 왜 언래핑을 하라고 하는거지,,, 이해할 수 없었다.

이유는 문자열을 정수로 변환하는 과정에 있었다.

Int로 문자열을 정수로 변환할 때, 문자열이 정수로 완벽하게 파싱될 수 있어야 한다.

하지만 만약 문자열이 유효한 정수가 아니라면, 변환은 실패하고 nil을 반환한다.

 

따라서 예시와 같은 문제를 해결하려면 옵셔널 언래핑을 해주면 된다.

import Foundation

let str = ["2000","09","06"]
var newStr:[Int] = []
for i in str{
    if let int = Int(i){
        newStr.append(int)
    }
}
print(newStr)
// result newStr = [2000, 9, 6]