Swift개발

[Swift]if let VS. guard let, nil coelescing operator(nil병합 연산자)

녹차맛고양이 개발강좌 및 IT리뷰 2022. 5. 16. 10:03

if let, guard let, nil 병합 연산자를 이용한 Optional Unwrapping을 알아보겠습니다.

예시 코드는 이전의 이모지 문자 인코딩을 이용하여 하겠습니다.

 

1. if let

- 조건의 Optional의 값이 nil인지 확인 하여 분기 처리

- 지역변수로만 사용 가능

// nonLossyASCII > utf8
func enc(_ inputStr:String) -> String{
    let data = inputStr.data(using: .nonLossyASCII, allowLossyConversion: true)!
        
    // Optional변수의 값이 nil인 경우에는 eles를 실행
    if let outputStr = String(data: data, encoding: .utf8){
        return outputStr
    } else{
        print("Encoding Failed")
        return ""
    }
}

 

2. guard let

- 조건이 true일때 전역 변수로 사용

- 조건이 false일때 else를 실행하여 따로 상위 코드 블럭을 종료 시켜줘야함(return, break, throw ...)

// nonLossyASCII > utf8
func enc(_ inputStr:String) -> String{
    let data = inputStr.data(using: .nonLossyASCII, allowLossyConversion: true)!
        
    // Optional 변수의 값이 nil인 경우에는 else부분을 실행하여 상위 코드 블럭을 빠져나간다
    guard let outputStr = String(data: data, encoding: .utf8) else {
        print("Encoding Failed")
        return ""
    }
        
    return outputStr
}

 

3. nil coelescing operator(nil 병합 연산자)

- (옵셔널변수) ?? (nil인 경우 일반 값)

- nil이 아니라면 unwrapping을 하고, nil인 경우에는 일반 값을 넣어준다

- 가장 간단하게 unwrapping

// nonLossyASCII > utf8
func enc(_ inputStr:String) -> String{
    let data = inputStr.data(using: .nonLossyASCII, allowLossyConversion: true)!
        
    // Optional 변수의 값이 nil인 경우 ?? 우측의 일반 값으로 unwrapping
    let outputStr = String(data: data, encoding: .utf8) ?? ""
        
    return outputStr
}