[Swift] Optional 옵셔널

임주희·2022년 10월 19일
0

Optional 옵셔널

값이 있을 수도 있고 없을 수도 있음
(여기서 값이 없다는 것은 nil을 의미함)

// 타입 뒤에 "?"를 넣어 선언하면, 옵셔널 변수
var optionalName: String?

optionalName = "juh2"
optionalName = nil

강제 추출

옵셔널 변수 뒤에 "!"를 붙여 옵셔널의 값을 추출합니다.

var optionalNumber: Int? = 3

print(optionalNumber) // Optional(3)

// 옵셔널 강제 해제
print(optionalNumber!) // 3

// 옵셔널 변수의 값이 nil인 경우 런타임오류 발생
optionalNumber = nil
print(optionalNumber!) // ❌ 런타임 오류

옵셔널 해제

비강제해제 옵셔널 바인딩

  • if문 옵셔널 바인딩
    값이 추출되면 if문 안에서만 추출된 값을 사용할 수 있음
if let number: Int = optionalNumber {
	// 값이 추출되면 실행되는 구문
	print(number) // 3
else {
	// 값 추출에 실패하면 실행되는 구문
}
  • guard문 옵셔널 바인딩
    값이 추출되면 guard문 다음 함수 전체에서 추출된 값을 사용할 수 있음.
    값이 추출되지 않으면 else문을 통해 흐름이 종료
guard let number: Int = optionalNumber else { return }
print(number) // 3

컴파일러에 의한 자동 해지

옵셔널을 비교연산자로 다른 변수과 비교하면, 컴파일러가 자동으로 옵셔널 값을 해지함

let value: Int? = 6
if value == 6 {
	print("value가 6입니다.")
}else {
	print("value가 6이 아닙니다.")
}
// "value가 6입니다."

묵시적해제 옵셔널 바인딩

옵셔널이지만 값을 사용할때는 자동으로 옵셔널이 해지됨

let string = "12"
var stringToInt: Int? = Int(string)
print(stringToInt) // Optional(12)
print(stringToInt + 1) // 🚫옵셔널 해지하라고 에러남

// 묵시적 옵셔널 해제
//타입 뒤에 !이 붙으면 사용할때 옵셔널이 해제됨
var stringToInt: Int! = Int(string)
print(stringToInt + 1) // 13

let string: String = "aa"
var stringToInt: Int! = Int(string)
print(stringToInt + 1) // 🚫에러남!

0개의 댓글