본문 바로가기
FE 공부/Swift

Swift _ Optional

by 꼬질꼬질두부 2022. 10. 3.
*래핑된 값 또는 값 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

댓글