ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Swift) 옵셔녈[Optional] 정리 2/2
    Programing Language/Swift 2019. 10. 10. 12:23
    728x90
    반응형

    1. 옵셔널 추출이란?

    • 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것

     

    2. 옵셔널 방식

    • 옵셔널 바인딩

    1. nil 체크 + 안전한 추출
    2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
    3. if-let 방식 사용

    func printName(_ name: String) {
        print(name)
    }
    // 함수를 선언할때 _ 문자를 넣게 되면 나중에 그 함수를 불러올때 변수명을 적어 주지 않아도 된다.
    var myName: String? = nil
    
    //printName(myName)  
    
    //(만약 func printName(_ name: String) { print(name)} 에서 _을 넣지 않았따면)
    
    //printName(name : myName) 이라고 적어야한다.
    
    // 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생
    
    if let name: String = myName {
        printName(name)
    } else {
        print("myName == nil")
    }
    
    
    var yourName: String! = nil
    
    if let name: String = yourName {
        printName(name)
    } else {
        print("yourName == nil")
    }
    
    // name 상수는 if-let 구문 내에서만 사용가능합니다
    // 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
    //printName(name)
    
    
    // ,를 사용해 한 번에 여러 옵셔널을 바인딩 할 수 있습니다
    // 모든 옵셔널에 값이 있을 때만 동작합니다
    myName = "yagom"
    yourName = nil
    
    if let name = myName, let friend = yourName {
        print("\(name) and \(friend)")
    }
    // yourName이 nil이기 때문에 실행되지 않습니다
    yourName = "hana"
    
    if let name = myName, let friend = yourName {
        print("\(name) and \(friend)")
    }
    // yagom and hana

     

    • 강체추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식, 만약 값이 없을경우(nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.
    var myName: String? = yagom
    var youName: String! = nil
    
    
    printName(myName!) // yagom
    myName = nil
    
    //print(myName!)
    // 강제추출시 값이 없으므로 런타임 오류 발생
    yourName = nil
    
    //printName(yourName)
    // nil 값이 전달되기 때문에 런타임 오류발생

    하지만 강제 추출은 선호 되는 방식이기 아니기 때문에 if-let 구문을 사용해서 옵셔널 값을 벗기는 걷이 선호된다.

    728x90
    반응형

    'Programing Language > Swift' 카테고리의 다른 글

    (Swift) 클래스,구조체/ 열거형 차이  (0) 2019.10.15
    (Swift) 구조체 정리  (0) 2019.10.10
    (Swift) 옵셔녈[Optional] 정리 1/2  (0) 2019.10.10
    (Swift) 반복문  (0) 2019.10.10
    (Swift) 조건문 정리  (0) 2019.10.10
Designed by Tistory.