I0S- 5

김정현·2023년 3월 12일
0

IOS 개발공부 일지

목록 보기
5/27

옵셔널

  • nil의 가능성을 명시적으로 표현함. 옵셔널 타입은 다른 데이터타입과 별개의 취급을 받는다.
  • "" 공백으로 한다고 해서 값이 없는 것은 아니다. 공백이라는 값을 할당한 것이다. 정말 아무 값도 없는 것을 nil이라고 표현한다.
  • 값이 없는 옵셔널 값에 접근하려고 하면 프로그램이 강제 종료될 확률이 높으니 주의
var myname: String = "KIM"
myname = nil

//오류

var mynaem: String? = "KIM"
myname =. il
print(myname)


//nil

위 코드는 오류가 난다. nil은 옵셔널로 선언된 곳에서만 사용이가능하다.

  • 옵셔널 변수를 생성하기 위해서는 데이어타입 뒤에 ?를 붙여 선언한다.
  • 옵셔널은 제네릭이 적용된 열거형이다. (제네릭은 나중에 나옴)

옵셔널 추출

옵셔널의 값을 옵셔널이 아닌 값으로 추출하는 것을 옵셔널 추출이라고 한다.

강제 추출

가장 간단하지만 가장 위험한 방법이다. (런타임 오류 가능성이 가장 높음)
강제 추출하기 위해서는 옵셔널 뒤에 !를 붙여주면 강제로 추출하여 반환한다. nil이라면 오류가 발생한다.

-> 오류 가능성을 내포하기에 지양해야하는 방식

옵셔널 바인딩

옵셔널에 값이 있는지 확인할 때 사용한다. 만약 값이 있다면 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 옵셔널이 아닌형태로 사용할 수 있게 해준다.

-> if나 while구문 등과 결합하여 사용할 수 있다.

var myname: String? = "Kim"      //?를 통해 옵셔널 바인딩으로 임시 상수 할당


if var name = myname{         //임시 변수 할당
 -> if 구문 안에서만 name이라는 임시 변수or상수를 사용할수 있다. else나 외부에서는 불가능

암시적 추출 옵셔널

nil을 할당하고 싶으나 매번 바인딩을 통한 값 추출이 힘들고, 런타임 오류가 발생하지않는 확신이 있을때 사용한다. ?대신 !를 사용하면 된다.
nil을 할당할 수 있지만 접근하려고하면 런타임 오류가 발생한다.

->이 방법또한 안전하지 않다.

0개의 댓글