*래핑된 값 또는 값 nil의 부재를 나타내는 형식
Non-Optional
변수와 상수에서는 값을 읽기 전에 항상 초기화 해야한다
>> 형식에 맞는 값을 갖고 있어야 한다.
var nonOp1 = 23
let nonOp2 = "hello"
저장할 값이 없는 경우에는?
>> Optional 이용 _ TypeName?
-예제-
let optionalNum: Int? = nil // 아무것도 저장하지 않겠다
// 만약 optioanl type을 nil로 초기화시에는 자료형을 지정해줘야함. 왜냐하면 nil은 형식 추론이 불가하기 때문
Optional에 값을 저장 후 사용하고싶다면?
>> Forced unwrapping(강제 추출 연산자) 이용 _ OptionalExpression!
-예제-
var num: Int? = nil// Optional 선언
print(num)// "nil\n"
num = 123
print(num)// "Optional(123)\n" _ wrapped 상태
let n = 123
print(n)// "123\n" _ 일반 상수 선언시 값의 상태
//만약 Optional에 저장된 값을 사용하고 싶을 때에는 unwrapping 과정 필요
print(num!)// "123\n" _ num이 unwrapping 됨
Optional 이용 시에는 자료형 이름 뒤에 "?" 붙이기
Optional에 있는 값을 사용하려면 unwrapping해야 함
Optional type을 unwrapping하면 NonOptional type으로 리턴 된다.
nil이 저장되어 있는 상태에서 강제 추출하면 crash 발생
조금 더 안전한 방법으로 optional 값을 추출하려면?
>>Optional binding 이용
// OptionalExpression을 평가해 값을 리턴할 수 있으면 상수에 값을 저장
// 만약 값이 nil일 경우에는 값을 리턴할 수 없으므로 실행 X -> crash가 생길 위험이 줄어듦
if let name: Type = OptionalExpression{
statements
}
while let name: Type = OptionalExpression{
statements
}
guard let name: Type = OptionalExpression{
statements
}// binding에 실패할 경우 else 구문 처리
-예제-
var num: Int? = nil
//if문으로 처리한 예제
if num != nil{
print(num!)
} else {
print("empty") // "empty\n"
}
//Optional binding 예제1
if let num = num {
print(num)
} else {
print("empty") // "empty/n"
}
//Optional binding 예제2
var str: String? = "str"
guard let str = str else {
fatalError()
}
str // binding한 상수는 else문 내부에서는 사용 불가하며 구문이 끝난 후 사용 가능
*kxcoding Mastering Swift 강의를 바탕으로 작성
'FE 공부 > Swift' 카테고리의 다른 글
Swift_Structure & Class (0) | 2022.10.10 |
---|---|
Swift _ Collection (2) | 2022.10.04 |
Swift _ Tuples, Strings and Characters (0) | 2022.10.04 |
Swift _ Closures (2) | 2022.10.04 |
Swift _ Functions (0) | 2022.10.03 |
댓글