Swift랑 친해지기/Swift문법정리

11.옵셔널

데브킹덕 2021. 12. 22. 14:26

1. 옵셔널이란

-값이 있을 수도, 없을 수도 있음을 표현

 

let optionalConstant: Int? = nil

 

let someConstant: Int = nil          ------> 옵셔널이 아닌 상수에 nil 값을 할당하려고 하면 컴파일 오류 발생

 

-nil이 할당 될 수 있는지 없는지 표현

 

코드로보기

//someOptionalParm에 nil이 할당 될 수 있다.

func someFunction(someOptionalParam:Int?){         --->Int 타입 옵셔널 명시

        //...

}

 

/// someOptionalParm에 nil이 할당 될 수 없다.

fumc someFunction(someOptionalParam:Int){         ---->옵셔널이 명시되어 있지 않은 Int 타입

       //...

}

 

someFunction(someOptionalParam:nil)

//someFunction(someParam:nil)    ---> 파라미터에 nill 값을 보낼 수 없음

 

2. 옵셔널을 쓰는 이유

- 명시적 표현

   1. nil의 가능성을 코드만으로 표현가능

   2. 문서/주석 작성 시간 절약

 

- 안전한 사용

   1. 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않고 사용가능

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

   3. 효율적 코딩

 

3. 옵셔널 문법과 선언

- 옵셔널 문법 = enum + generics

- 옵셔널 선언

enum Optional<Wrapped>:ExpressibleByNiliteral{

      case none

      case some(Wrapped)

}

 

let optionalValue : Optional<Int> = nil             ------> 정석적인 옵셔널표현방법

let optionalValue : Int? = nil                              ------> 다른 방법,  ?를 띄워쓰면 절대 안됨

 

-옵셔널 표현

  1. 느낌표(!)를 이용한 암시적 추출 옵셔널

 

//Implicitly Unwrapped Optional

var implicitlyUnwrappedOptionalValue: Int! = 100

 

switch implicitlyUnwrappedOptionalValue{

case.none:

     print("This Optional variable is nil")

case.some(let value):

     print("Value is \(value)")

}

 

 

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

implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue +1

 

// nil 할당가능

implicitlyUnwrappedOptionalValue = nil

 

// 잘못된 접근으로 인한 런타임 오류 발생 (먼저 implicitlyUnwrappedOptionalValue에 nil값을 넣어주었기 때문)

// implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue +1

 

2. 물음표(?)를 이용한 옵셔널

 

//Optional

var optionalValue: Int? = 100

 

switch optionalValue{

case.none:

   print("This Optional variable is nil")

case.some(let value):

   print("Value is \(value)")

}

 

// nil할당가능

optionalValue = nil 

 

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

// optionalValue = optionalValue +1

 

'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글

13. 구조체  (0) 2021.12.22
12. 옵셔널 추출  (0) 2021.12.22
10. 반복문  (0) 2021.12.21
09. 조건문  (0) 2021.12.21
08.함수고급  (0) 2021.12.21