[Swift] Optional 정리

4103 단어 swiftswift

Swift Optional 정리

Optional 구글 번역기로 번역할 시 선택 과목이라고 변역되며 변수에 nil 타 언어는 Null을 관리하기 위한 방법이라고 이해했다.
어떠한 변수 Input이 데이터가 있는게 아닌 nil로 올 수 있기 때문에 Optional을 사용하는 것 같다.


Optional

📕 코드

let myName: String = nil

어떠한 변수에는 일정한 값이 있을 수 있지만 아무것도 없을 수 있다.
이럴 경우

error: 'nil' cannot initialize specified type 'String'

다음과 같은 에러가 뜨게 된다.
이럴 경우를 방지하기 위해 Optional을 사용한다.

📕 코드

let myName: String? = nil

포맷에 '?'를 붙일 경우 Optional로 에러가 뜨지 않고 nil값과 String값을 동시에 변수, 상수에 할당할 수 있다.

📕 코드

let myName: String? = "Minsu"
print(myName)

위의 코드를 print한다면

Optional("Minsu")

값 뿐만이 아닌 Optional이 추가적으료 표시되고 안 쪽에 value가 표시된다.

그러면 이제 위의 Optional을 순수하게 값만 받아오는 4가지 방법을 사용해보자


Force unwrapping

단순하게 변수 혹은 상수이름 뒤에 '!'를 붙여주는 것만으로 값을 받을 수 있다.

📕 코드

print(myName!)
Minsu

그러나

📕 코드

let myName: String? = nil
print(myName)
print(myName!)

이렇게 nil값이 들어왔다면 결과값은 어떻게 나올까??

💡결과

nil
__lldb_expr_140/MyPlayground.playground:13: Fatal error: Unexpectedly found nil while unwrapping an Optional value

다음과 같이 에러메시지가 발생한다.

그럼 nil값을 받더라도 에러없이 출력하는 다른 방법도 알아보자.


Optional Binding

Optional Binding은 2가지의 방법이 있으며 nil값을 확인하고 출력할 수 있는 방법이 생긴다.

  1. if - let을 사용하는 방법

📕 코드

let myName: String? = "Minsu"

if let name: String = myName {
    print(name)
} else {
    print("Not Name")
}

다음과 같이 optional 변수 혹은 상수를 다른 상수에 넣어 if문을 구성하는 것으로
만약 값이 있을 경우 if문 값이 없는 nil일 경우 else문이 동작하게 된다.

📕 코드

if let name: String = myName {
    print(name)
} else {
    print("Not Name")
}

💡결과

Minsu

📕 코드

let myName: String? = nil
if let name: String = myName {
    print(name)
} else {
    print("Not Name")
}

💡결과

Not Name
  1. guard를 사용하는 방법

📕 코드

func optionalBinding(yourName: String?) {
    guard let name: String = yourName else {
        print("No Name")
        return
    }
    print(name)
}

guard를 사용한 함수를 구현했다.
만약 yourName이 nil일 경우

💡결과

No Name

값이 있을 경우

💡결과

Minsu

로 출력이 된다. nil값일 경우 else문을 통과하며 만약 return이 없으면

💡결과

'guard' body must not fall through, consider using a 'return' or 'throw' to exit the scope

다음과 같은 에러가 뜨니 주의해야한다.

yourName에 값이 있을 경우 else문을 통과하지않고 guard문을 통과해 맨 밑의 print문을 동작시켰다.


Nil-Coalescing

Nil병합 문이라고도 하며 변수 값에 '??'를 사용하여 nil일 경우 default 값을 주며 값이 있을 경우 그 값을 사용하는 것이다.

📕 코드

var myName: String? = nil
print(myName ?? "Jihoon")

💡결과

Jihoon

📕 코드

var myName: String? = "Minsu"
print(myName ?? "Jihoon")

💡결과

Minsu

위 두개의 코드를 보면 알겠지만 변수 ?? defaultValue로 변수가 nil일 경우 defaultValue를 변수에 넣고

기존 변수 값이 있는경우 그 값 그대로를 사용한다.


참고

좋은 웹페이지 즐겨찾기