[TIL]0728_swift 옵셔널(2)

JJ_u·2021년 7월 28일
0

TIL

목록 보기
3/7
post-thumbnail
post-custom-banner

옵셔널 바인딩(Optional Binding)

옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용

  • 옵셔널에 값이 있을 경우: 옵셔널에서 추출한 값을 일정한 블록 안에서 사용할 수 있는 상수, 변수로 할당하여 옵셔널이 아닌 형태로 사용하게 해준다.
  • if, while 등과 결합하여 사용
if let constantName = someOptional {
		statements
}

옵셔널 바인딩 예제

if let actualNumber = Int(possibleNumber) {
    print("The string \"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
    print("The string \"\(possibleNumber)\" couldn't be converted to an integer")
}
// Prints "The string "123" has an integer value of 123"

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"

if let firstNumber = Int("4") {
    if let secondNumber = Int("42") {
        if firstNumber < secondNumber && secondNumber < 100 {
            print("\(firstNumber) < \(secondNumber) < 100")
        }
    }
}
// Prints "4 < 42 < 100"

// guard 사용 옵셔널 바인딩
func printParsedInt(from: String) {
    guard let parsedInt = Int(from) else {
        print("Int로 컨버팅 안된다~")
        return
    }
        
    print(parsedInt)
}

💡옵셔널 바인딩을 통해 한 번에 여러 옵셔넣의 값을 추출할 수 있는데 쉼표(,)를 사용하여 바인딩 할 옵셔널을 나열하면 된다. (옵셔널 중 값이 하나라도 없다면 해당 블록 내부의 명령어 실행❌)

  • 옵셔널 바인딩의 값이 0, Boolean 조건이 false일때 전체 if문의 조건은 false로 간주된다.

암시적 추출 옵셔널(Implicity Unwrapped Optionals)

nil을 할당하고 싶거나 옵셔널 바인딩으로 매번 값 추출이 번거로울 경우, nil로 인해 런타임 오류가 발생하지 않을것 같다는 확신이 들 때 nil을 할당해줄 수 있는 변수, 상수를 사용하기 위해 사용

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation point

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation point
  • 암시적 추출 옵셔널로 지정된 타입 일반 값처럼 사용 가능 but 옵셔널이기 때문에 nil 할당⭕
  • nil이 할당되어 있을 때 접근을 시도하면 런타임 오류 발생

💡옵셔널을 사용할 때는 강제 추출, 암시적 추출 옵셔널 보다 옵셔널 바인딩, nil 병합 연산자, 옵셔널 체이닝 등을 사용하는 것이 안전함


🍎느낀점

  • 해도해도 헷갈리는 스위프트 알다가도 모르겠다
  • 파이썬.....좀 더 많이 풀어봐야지
  • 오늘은 gdsc 온보딩도 있었고 기숙사 일도 있어서 좀 시간이 없었다는 핑계~

참고: https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html

profile
개발자 만들기
post-custom-banner

0개의 댓글