생각해보기
▶정말 꼭 필요한 경우에 한하여, 자신이 책임질 수 있는 상황이 아니라면 옵셔널 강제추출을 사용하지 않겠노라 다짐하는 글을 미래의 나에게 한문장씩 남겨봅시다.
+)다른 수강생들과 자유롭게 토론하세요. 토론게시글 작성 시, [연관강의]를 지정해주시면 좀더 원활한 토론이 가능합니다:)
강의내용
생각해보기
▶정말 꼭 필요한 경우에 한하여, 자신이 책임질 수 있는 상황이 아니라면 옵셔널 강제추출을 사용하지 않겠노라 다짐하는 글을 미래의 나에게 한문장씩 남겨봅시다.
+)다른 수강생들과 자유롭게 토론하세요. 토론게시글 작성 시, [연관강의]를 지정해주시면 좀더 원활한 토론이 가능합니다:)
강의내용
:: 옵셔널 추출 ::
1. 옵셔널 추출이란?
2. 옵셔널 방식
1. nil 체크 + 안전한 추출
2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
3. if-let 방식 사용
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
//printName(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
var myName: String? = yagom
var youName: String! = nil
printName(myName!) // yagom
myName = nil
//print(myName!)
// 강제추출시 값이 없으므로 런타임 오류 발생
yourName = nil
//printName(yourName)
// nil 값이 전달되기 때문에 런타임 오류발생
https://goo.gl
http://www.edwith.org
comment
정말 필요할때가 아니면 옵셔널 강제추출을 사용하지 않겠습니다~!!!! 맹세 맹세
런타임 오류 = 프로그램 실행 중 발생한 오류, 프로그램이 동작 중에 어떤 이유로 잘못된 데이터를 가지게 되어 잘못된 처리를 진행하려 할 때 런타임 오류가 발생한다.
Force Unwrapping 옵셔널 강제 추출은 웬만하면 하지 않겠다!
타입스크립트에서도 값의 타입이 string | undefind 일 경우 한번 확인 하는 과정을 거치는데 스위프트는 타입에 맞는 값이 들어있는지 확인하는 용도로 if-let을 사용하는것이군요!
그냥 !는 쓰지 않겠습니다! ^^
optional 강제추출은 디버깅 이외 용도에는 사용하지 않겠습니다.
옵셔널 강제추출 방식이 아닌 if-let으로 옵셔널 바인딩 방식으로 값을 추출하는 습관을 들여야겠습니다.
비공개 글입니다.