<Swift> Chapt 8. Optional

쑤야·2022년 9월 3일
0

Swift

목록 보기
1/3
☝🏻 옵셔널을 사용할 때는 강제 추출 또는 암시적 추출 옵셔널을 사용하기 보다는 **`옵셔널 바인딩`, `nil 병합 연산자`, `옵셔널 체이닝`** 등의 방법을 사용하는 편이 훨씬 안전

1. 옵셔널 사용

let primary = School(rawValue: "유치원") //타입 명시X -> Optional 타입인 'School?'로 추론
  • 변수나 상수를 선언할 때, 데이터 타입을 명시하지 않으면 타입 추론 사용하게 됨
  • 이때 타입이 Optional 타입으로 추론되게 됨

2. 옵셔널 추출

☝🏻 옵셔널을 사용할 때는 강제 추출 또는 암시적 추출 옵셔널을 사용하기보다는 옵셔널 바인딩, nil 병합 연산자, 옵셔널 체이닝 등의 방법을 사용하는 편이 훨씬 안전

# 강제 추출

  • 옵셔널 값의 뒤에 느낌표를 붙여주면 값을 강제로 추출하여 반환
  • 런타임 오류의 가능성을 항상 내포하기 때문에 옵셔널 강제 추출 방식 사용은 지양

# 옵셔널 바인딩

  • 옵셔널에 값이 있는지 확인할 때 사용
  • 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 옵셔널이 아닌 형태로 사용할 수 있도록 해줌
if let name = myName{
		..
}else{
		..
}

if var name = myName{
		..
}else{
		..
}
  • if 구문을 실행하는 블록 안쪽에서만 name이라는 임시 상수 사용 가능

  • if 블록 밖에서는 사용할 수 없고, else 블록에서도 사용 불가능

  • 옵셔널 바인딩을 통해 한 번에 여러 옵셔널의 값을 추출할 수도 있음

  • 쉼표를 사용해 바인딩 할 옵셔널을 나열하면 됨

  • 이때 바인딩하려는 옵셔널 중 하나라도 값이 없으면 해당 블록 내부의 명령문은 실행되지 않음

if let name = myName, let friend = yourName {
		..
}

# 암시적 추출 옵셔널

  • nil을 할당하고 싶지만, 옵셔널 바인딩으로 매번 값을 추출하기 귀찮거나 로직상 nil 때문에 런타임 오류가 발생하지 않을 것 같다는 확신이 들 때 사용
  • 타입 뒤에 느낌표(!)를 사용하면 됨
  • 암시적 추출 옵셔널로 지정된 타입은 일반 값처럼 사용할 수 있으나, 여전히 옵셔널이기 때문에 nil도 할당 가능
  • 그러나 nil이 할당되어 있을 때 접근을 시도하면 런타임 오류가 발생
var myName: String = "yagom"
myName = nil

if let name = myName{
	..
}

//myName.isEmpty 실행할경우 nil 상태에서 접근을 시도했기 때문에 런타임 오류 발생

by. 스위프트 프로그래밍 3판

profile
CE 20

0개의 댓글