Algorithm/basic

Swift - 옵셔널

Teol 2023. 12. 6. 17:55
// 옵셔널
var index: Int?
if index == 0 {
    print("0")
}

if index == nil {
    print("nil")
}

// 옵셔널 바인딩
index = 100
if let cont = index {
    print(cont)
}

index = nil
if let index {
    print(index)
} else {
    print("index nil")
}

//if index {
//    print("??????")
//}

// 옵셔널 대체값 : nil 병합 연산자
let index3 = index != nil ? index : 0
let index2 = index ?? 0
print(index2)

// 옵셔널 강제
//print(index!)  //error: Execution was interrupted, reason: EXC_BREAKPOINT (code=1, subcode=0x18c986650).

let pStr: String? = "hahaha"   // 옵셔널로 선언
let pStr2: String! = "hahaha"  // 암묵적 언래핑 p39

let oStr: String = pStr!       // pStr 강제 언래핑
let oStr2: String = pStr2
print(oStr, oStr2)

 

 

옵셔널이란 Optional<T> 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다.

따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있습니다. 라고 나와있다.

 

쉽게 말해 데이터를 보호하고 타입을 안전하게 다루기위한 방법이다.

옵셔널을 풀기위해서는 강제 언래핑하는 방법이 있는데  pStr! 처럼 변수에 !를 붙이는 것이다.

(충돌이나 오류가 날수있으므로 지양하는 방법이다)

또한 자료형에 붙이는 String?도 있는데 값이 스트링일수있고 아닐수도 있다는 것이다.

 

강제 언래핑하지않고 옵셔널 값을 안전하게 꺼내는 방법은 바로 옵셔널 바인딩하는 것

값이 있거나 리턴할수 있는지 값을 체크(검사)하고 사용가능하면 값을 언래핑된 값을 저장해두고 사용할때만 언래핑하기 때문에 오류나 충돌의 위험을 줄여줍니다.

'Algorithm > basic' 카테고리의 다른 글

Swift - guard  (0) 2023.12.07
Swift - Tuple  (1) 2023.12.05
Swift - 타입별칭  (0) 2023.12.05
Swift - 재귀함수  (0) 2023.11.05
Swift - stack  (0) 2023.11.03