let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
var serverResponseCode: Int? = 404
serverResponseCode = nil
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
// <- 강제 언래핑 Forced unwrapping
}
?
를 붙여서 optional 타입으로 사용한다.Int?
→ Int 타입이 옵셔널로 동작하게 된다. Int 타입의 값이 있을 수도 있고, 없을 수도 있다.값의 타입을 바꾸는 것은 값을 바꿔서 새로운 타입의 값으로 만든다.
↔ 타입 케스팅 종류: 다운 캐스팅, 업캐스팅
possibleNumber
가 숫자가 아니라면, Int로 새로운 값을 만들어도 값이 바뀌지 못한다.
→ nil이 들어간다.!
💡!
는 에러가 나기 때문에 쓰지 말자는 쪽으로 나오기도 한다.
1️⃣ if
문 사용하여 nil
인지 비교 하는 방법
2️⃣ Optional Binding: if let
3️⃣ guard
let possibleNumber = "123.a" // 변환할 수 없는 문자열
let convertedNubmer = Int(possibleNumber) // 변환되지 않고 nil 반환
if let actualNumber = Int(possibleNumber) {
print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
print("\"\(possibleNumber)\" could not be converted to an integer")
}
let possibleNumber = "123.a"
let convertedNumber = Int(possibleNumber)
키워드: if let - else
Implicitly Unwrapping Optionals
let possibleString: String? = "An optinal String."
let forcedString: String = possibleString! // 명시적인 언래핑 표시 필요
let assumedString: String! = "An implicitly unwrapped optional string"
let implicitString: String = assumedString // 명시적인 언래핑 필요 ❌
!
를 붙여서 옵셔널이지만 항상 값이 있을 것이라는 의미guard `Bool 또는 Optional Binding ` else {
`statements`
}
✅ 조건이 만족되지 않았을 때, 프로그램의 실행을 guard
의 scope 바깥으로 내보낼때 사용
else
구문을 작성하거나, guard
의 scope 바깥으로 내보내는 코드 작성해야 한다.guard
의 scope 바깥으로 내보내는 키워드
return
break
continue
throw
func printMessage(_ message: String?) {
guard message != nil else { return }
print(message!)
}
💡guard로 옵셔널 바인딩 하면 if let으로 옵셔널 바인딩 했을 때와 달리 괄호 밖에서도 사용할 수 있다.
func printMessage(_ message: String?) {
guard let letMessage = message else { return }
print(letMessage)
}