본문 바로가기
모바일앱/Swift

옵셔널

by GeekCode 2021. 10. 7.
반응형

옵셔널 소개

// Optional??
 var name: String="Joon"
 var dogName:String="Mozzi"
 var carName:String=???

이름을 정의 할때, 강아지이름을 정의할 때 사용하는 선언을 보자

만약 자동차이름을 할당해야하는데 아직 내가 자동차가 없다면? 

없는 것에 대해 표현하려고 하니 애매해진 경우가 있다.

 

그런 것은 Boolean을 통해 유무를 먼저 체크를 할 수 있지만. 그것은 코드를 깔끔하지 못하게 만드는 요소이다.

 

내가 없는 것을 어떻게 표현할 것인가?

 어떠한 값을 갖고있지 않는 경우 혹은 반대를 모두 표현할 수 있다.

 존재하지 않음은 nil로 표현할 수 있다.

 Optional은 박스에 비유가능

 박스에 value가 있으면 그대로 표현, 없으면 nil로 표현

 

 

 

옵셔널의 사용

// 아주 간단한 과제
// 1. 여러분이 최애하는 영화배우의 이름을 담는 변수를 작성해주세요(타입 String?)
// 2. let num = Int("10") -> 타입은 뭘까요?

print("===> 1번 문제")
var actorName: String? = nil //없을 수도 있음

print("===> 2번 문제")
// 정수

let num = Int("10") //문자지만 변환하면 가능할수도? 하는 케이스
//let num = Int("10하이")
//문자지만 변환하면 하지않은 케이스

 

고급기능 4가지

// Forced unrapping 

// Optional binding (if let)

// Optional binding2 (guard)

// Nill coalescing

import SwiftUI

var carName: String? = "땡크"
//고급기능 4가지

// Forced unrapping
// Optional binding (if let)
// Optional binding2 (guard)
// Nill coalescing

// 영어로 공부하는 이유 : 공부하다가 막히는 경우 영어로 검색하면 보다 다양한 루트를 발견가능


// Forced unrapping > 박스안에 있는 값을 꺼내서 사용할 때, 강제로 여는 것
// Optional binding (if let) > 부드럽게 박스를 까는 방법 1
// Optional binding2 (guard) > 부드럽게 박스를 까는 방법 2
// Nill coalescing > 박스를 까봤더니 값이 없으면 디폴트 값을 줘보자 (중고나라 사기 -> 벽돌)

//print(carName)
//Optional("땡크")

//print(carName!)
//"땡크"

//carName = nil
//print(carName!)
//error: Execution was interrupted, reason: EXC_BREAKPOINT (code=1, subcode=0x18f2ea5d8).
// !로 강제로 언레핑이 가능하지만 안에 nil이라면 경고가 뜬다.


//if let unwrappedCarName = carName {
//    print(unwrappedCarName)
//} else {
//    print("Car Name 없다.")
//}

// -----> 함수로 사용해보기 , 파싱하고 캐스팅하기
//func printParsedInt(from: String) {
//    if let parsedInt = Int(from) {
//        print(parsedInt)
//    } else{
//        print("Int로 컨버팅안된단다")
//    }
//}

//printParsedInt(from: "100")
//printParsedInt(from: "하이 데얼")
//

//func printParsedInt(from: String) {
//    if let parsedInt = Int(from) {
//        print(parsedInt)
//        if parsedInt > 0 {
//            print(parsedInt)
//        } else{
//
//        }
//    } else{
//        print("Int로 컨버팅안된단다")
//    }
//}
//레벨이 너무 많아지면 복잡해진다.




//
//func printParsedInt(from: String){
//    guard let parsedInt = Int(from) else {
//        print("Int로 컨버팅안된단다")
//        return
//    }
//    print(parsedInt)
//}
//printParsedInt(from: "100")
//
//


//let myCarName = carName ?? "모델 S"
//carName이 nil 이라면 모델 S 라는 디폴트 값을 가지게 된다.

 

반응형

'모바일앱 > Swift' 카테고리의 다른 글

Collection - Set  (0) 2021.10.10
Collection - Dictionary  (0) 2021.10.10
Collection - Array  (0) 2021.10.09
옵셔널 도전과제  (0) 2021.10.08
함수의 고급기능(1. 오버로드 2. In-out parameter 3. 함수안에 함수를 넣기)  (0) 2021.10.06
기본함수사용능력 테스트  (0) 2021.10.06
함수 응용하기  (0) 2021.10.05
함수 기본  (0) 2021.10.04