/* Optional */
값이 '있을 수도, 없을 수도 있음'
let optionalConstant: Int? = nil
let someConstant: Int = nil -> 에러 발생
옵셔널이 필요한 이유
- nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현 가능
- 문서/주석 작성 시간을 절약
- 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용
- 효율적인 코딩
- 예외 상황을 최소화하는 안전한 코딩
? 와 !
!: 암시적 추출 옵셔널
var optionalValue: Int! = 100
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
//기존 변수처럼 사용 가능
optionalValue = optionalValue + 1
//nil 할당 가능
optionalValue = nil
//잘못된 접근으로 인한 런타임 오류 발생
optionalValue = optionalValue + 1
?: 일반적인 옵셔널
var optionalValue: Int? = 100 Int값이 들어있을 수도, 없을 수도 있는 변수
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
//nil 할당 가능
optionalValue = nil
//기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가
optionValue = optionValue + 1
Optional Binding
옵서널의 값을 꺼내오는 방법 중 하나
nil 체크 + 안전한 값 추출
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
printName(myName) //전달되는 값의 타입이 다르기 때문에 컴파일 오류발생 옵셔널 타입은 일반 String 타입과 다른 타입으로 취급이 되기 때문이에요!
func printName(_ name: String) {
print(name)
}
var myName: String! = nil
if let name: String = myName {
printName(name)
} else {
print("myName == nil)
}
//name 상수는 if-let 구문 내에서만 사용가능합니다
//상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
printName(name)
var myName: String? = "JaeH"
var yourName: String? = 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)")
}
//JaeH and hana
! 저는 Swift를 배우며 기록하는 목적으로 블로그에 작성중이며 다른 사람에게 전달이나 강의를 위한 글은 아니기 때문에 틀린 내용이 있을 수 있습니다.
*야곰님의 강의 참고하였습니다.
'Swift' 카테고리의 다른 글
FirebaseAuth 기능 구현 (0) | 2022.04.03 |
---|---|
IOS) 간단한 토이프로젝트를 만들어 보다 (0) | 2021.08.09 |
테이블 뷰 구현 이론 (0) | 2021.07.13 |
스위프트 기본 문법 - 2 (0) | 2021.07.12 |
스위프트 기본 문법 - 1 (0) | 2021.07.11 |