본문 바로가기

Swift

[Swift} Optional 기본 개념

/* Optional */

 

 값이 '있을 수도, 없을 수도 있음'

 

 let optionalConstant: Int? = nil

 

 let someConstant: Int = nil -> 에러 발생

 

 옵셔널이 필요한 이유

 - nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현 가능

 - 문서/주석 작성 시간을 절약

 - 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용

 - 효율적인 코딩

 - 예외 상황을 최소화하는 안전한 코딩

 

 ? 와 !

 !: 암시적 추출 옵셔널

 var optionalValue: Int! = 100

 

 switch optionalValue {

 case .none:

    print("This Optional variable is nil")

 case .some(let value):

    print("Value is \(value)")

 

 //기존 변수처럼 사용 가능

 optionalValue = optionalValue + 1

 

 //nil 할당 가능

 optionalValue = nil

 

 //잘못된 접근으로 인한 런타임 오류 발생

 optionalValue = optionalValue + 1

 

 ?: 일반적인 옵셔널

 var optionalValue: Int? = 100 Int값이 들어있을 수도, 없을 수도 있는 변수

 

 switch optionalValue {

 case .none:

    print("This Optional variable is nil")

 case .some(let value):

    print("Value is \(value)")

 

 //nil 할당 가능

 optionalValue = nil

 

 //기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가

 optionValue = optionValue + 1

 

 Optional Binding

 옵서널의 값을 꺼내오는 방법 중 하나

 nil 체크 + 안전한 값 추출

 

 func printName(_ name: String) {

    print(name)

 }

 

 var myName: String? = nil

 

 printName(myName) //전달되는 값의 타입이 다르기 때문에 컴파일 오류발생 옵셔널 타입은 일반 String 타입과 다른 타입으로 취급이 되기 때문이에요!

 

 func printName(_ name: String) {

    print(name)

 }

 

 var myName: String! = nil

 

 if let name: String = myName {

    printName(name)

 } else {

    print("myName == nil)

 }

 

 //name 상수는 if-let 구문 내에서만 사용가능합니다

 //상수 사용범위를 벗어났기 때문에 컴파일 오류 발생

 printName(name)

 

 var myName: String? = "JaeH"

 var yourName: String? = nil

 

 if let name = myName, let friend = yourName {

    print("\(name) and \(friend)")

 }

 //yourName이 nil이기 때문에 실행되지 않습니다

 

 yourName = "hana"

 

 if let name = myName, let friend = yourName {

    print("\(name) and \(friend)")

 }

 //JaeH and hana

 

 

! 저는 Swift를 배우며 기록하는 목적으로 블로그에 작성중이며 다른 사람에게 전달이나 강의를 위한 글은 아니기 때문에 틀린 내용이 있을 수 있습니다.

 

 

*야곰님의 강의 참고하였습니다.

 

'Swift' 카테고리의 다른 글

FirebaseAuth 기능 구현  (0) 2022.04.03
IOS) 간단한 토이프로젝트를 만들어 보다  (0) 2021.08.09
테이블 뷰 구현 이론  (0) 2021.07.13
스위프트 기본 문법 - 2  (0) 2021.07.12
스위프트 기본 문법 - 1  (0) 2021.07.11