► Swift

[작성중] [Swift] optional unwrapping, 강제추출(forced upwrapping)

다람트리 2023. 6. 28. 20:36
반응형

두서없이 써논 글입니다!

 

/* 1. optional unwrapping */

//옵셔널타입 형태
let a:Int? = nil
print(a)    //nil
print(type(of:a))   //Optional<Int>
/*
 상수a는 Int 자료형이 아닌, Optional Int 자료형이다.
 즉,
 Optional 자료형을 사용하기 위해선
 Optional이란 포장지를 까주고 써야 한다.
 */

// Optional 자료형으로 안까주면..?
let a1: Int?
a1=4
var myInfo = "내 나이는 \(a1)살 입니다."
//"내 나이는 Optional(4)살 입니다."

//nil 예제 (optional unwrapping할 필요가 없음.)
let a2:Int? = nil
print("a==\(a2)")   //a==nil
let a3:Int? = 4
print("b==\(a3)")   //b==Optional(4)


/* 2. 강제추출(forced upwrapping) */
//강제추출 연산자 !(느낌표)
var myInfo1 = "내 나이는 \(a1!)살 입니다."  //"내 나이는 4살 입니다."
//nill 주의
let a4:Int? = nil
//print(a4!)
//err: error: Execution was interrupted, reason: EXC_BREAKPOINT (code=1, subcode=0x18bd55e10).
/*
 에러가 뜨면 감사한거임
 만약 런타임 에러가 나면, 비정상 종료 버그가 생겨버림
 */

// nill인지 아닌지 확인하고 쓰면되지만, 현업에선 (optional binding이라는)다른방법으로 쓰니 아래 코드는 이해만하고 넘어가기.
var name: String? = "daram"
if name != nil{
    print("name == \(name!)")   //name == daram
} else {
    print("name == nil")
}
var name1:String? = nil
if name1 != nil{
    print("name1 == \(name!)")   //name == daram
} else {
    print("name1 == \(name1)")  //name1 == nil
}


//참고링크: https://babbab2.tistory.com/16
반응형