티스토리 뷰

swift에는 optional 이라는 변수 타입이 있다. 있을지 없을지 모르는 값을 표현하기 위한 방법이다.

 

어떤 값을 변수에 저장하려고 하는데 그 값이 변수를 선언하는 시점에 없을지 있을지 알 수 없는 경우 타입명 뒤에 ?를 붙여서 표현한다.

(swift는 처음 변수 선언 시 nil 값이 들어가는 것을 허용하지 않기 때문에)

let carName: String?
carName = "Tesla"

print(carName) // 결과: Optional("Tesla")

이렇게 optional 변수를 쓰는 경우에는 그 값 자체가 optional로 표현이 된다. 따라서 이를 풀고 그 안에 넣어진 값에 접근할 수 있는 4가지 방법이 있다.

 

1. Forced unwrapping

이 방법은 강제 언랩핑 방식으로 사용하고자 하는 optional 변수명 뒤에 !를 붙여 접근하는 방식이다.

print(carName!) // 결과: Tesla

하지만 이 방법은 carName의 값이 없는 경우 (nil인 경우) 에러가 발생한다.

 

2. Optional binding (if let)

if let name = carName {
	// carName 값이 있는 경우...
    print(name) // 결과 Tesla
} else {
	// 값이 없는 경우...
}

 

3. Optional binding (guard)

func printCarName(carName: String?) {
	guard let name = carName else {
    	// carName이 없는 경우...
        return
    }
    
    // carName이 있는 경우...
    print(name) // 결과: Tesla
}

printCarName(carName: carName)

 

4. Nil coalescing

이 방식은 값이 없는 경우에 그냥 기본 타입 변수를 지정해 주는 방식이다.

let carName2 = carName ?? "기본 차량"

 

5. 예제

(1) 문자열을 받아서 숫자로 변경하여 출력하기

fun printParsedInt(from: String) {
	guard let num = Int(from) else {
    	print("Int로 변환할 수 없는 문자입니다.")
        return
    }
    
    print(num)
}

printParsedInt(from: "100")

문자열을 Int 타입으로 변환하는 경우 해당 문자열이 변환이 될 수도 있고 안 될 수도 있기 때문에 Int(from)은 optional 타입이다. 따라서 이를 guard let 방식을 통해 unwrapping 하여 표현할 수 있다.

 

(2) 문자열을 받아서 합을 구해 출력하기

import Foundation

let input = readLine() // 입력 값: 3 5

func printAddNum(input: String?) {
    if let nums = input {
        print(nums) // 결과: 3 5
        let arr = nums.split(separator: " ").map{ Int($0)! }
        print(arr) // 결과: [3, 5]
        print(arr[0] + arr[1]) // 결과: 8
    }
}

printAddNum(input: input)

swift의 경우 키보드 입력을 받기 위해 Foundation을 import하고 readLine()으로 입력 값을 받아온다. 입력이 있을 수도 있고 없을 수도 있기 때문에 처음 input 값은 optional 변수가 된다.

이후 이 값을 공백(" ")을 기준으로 2개의 값으로 나누면 ["3", "5"] 형태로 변환이 된다. 이 변환된 값을 바로 map을 통해 Int로 변경하게 되는데 이때 문자열이 Int로 변경될 수도 있고 아닐 수도 있기 때문에 역시 한번 더 !를 통해 unwrapping을 해줘야 비로소 [3, 5] 형태로 arr 변수에 값이 담기게 된다.

map에서 Int($0)!의 $0은 인자 하나를 의미한다.


이로써 swift 언어의 특별한 optional 변수를 알아보고 이를 unwrapping 하여 값을 추출하는 방법을 알아보았다.

 

iOS 개발과 swift에 대한 공부를 시작한지 얼마 안되어 부족한 점이 많으니 혹시 수정할 부분이나 추가하면 좋은 부분이 있다면

같이 공유해요~~!!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함