[TIL]0728_swift 옵셔널(2)
옵셔널 바인딩(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
Author And Source
이 문제에 관하여([TIL]0728_swift 옵셔널(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jitoor610/TIL0729옵셔널2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)