Basic - Optional

Eli·2021년 2월 6일
1

Swift

목록 보기
5/17
post-thumbnail

정리

Safety를 강조하는 Swift에서 null(nil)을 다루는 방법.
Optional 이라는 Type을 통해 nullable을 결정.

타언어들과 비교해서 optional이란 타입만 nil을 가질 수 있게 되어,
컴파일 단계에서 nil에 대한 예외처리가 강제된다.

null point exeption이라는 문제로부터 조금 더 안전할 수 있다.

//아래와 같이 Int type은 nil이 될 수 없다
//non-optional
var value: Int
value = nil //error

//optional
//?를 붙여 Optional<Int>라는 Int와는 다른 타입의 property가 된다
var value: Int?
value = nil //ok

Optional Binding

Optional type인 값에서 non-optional 값을 얻을 수 있는 방법.
Swift만 가지고 있는 특이한 구문.

var firstValue: Int? = 20
var secondValue: Int? = 100

if let first = firstValue {
	print(first) //print 20
	print(firstValue) //print Optional<20>
} else {
	//nil일 경우에 로직
}

//2개 이상의 옵셔널 바인딩도 가능
if let first = firstValue,
	let second = secondValue {
	print(first + second)
}

//non-optional 값을 사용하지 않을 경우
//_로 생략가능
if let _ = firstValue {
	
}

Optional Chaining

Class First{
	var second: Second?
}

Class Second{
	var third: Int?
}


var f = Frist()

//Binding만 사용
if let s = f.second,
	let t = s.third {

}

//Optional Chaining
//Optinal Binding만 사용한 케이스보다 훨씬 짧고 직관적인 코드 작성이 가능.
if let t = f.second?.third {
		//한줄로 옵셔널 바인딩
}

Optional Unwrapping

강제적으로 Optional type을 non-optional type으로 변경시키는 구문.
만약 nil이 할당된다면 runtime error 가 발생한다.

대부분의 객체나 값은 안전하게 optional로 다루는게 권장하는 방법이나
간혹 몇몇 군데에서 꼭 non-optional type이 필요한 경우에 사용된다.

var number1:Int? = 20
var number2:Int = 100

let sum = number1! + number1!


number1 = nil
let minus = number1! - number2! //runtime error

#학습에 대한 내용으로 틀린 내용이 있을 수 있습니다.
#댓글로 남겨주시면 더 좋은 게시글로 수정하도록 하겠습니다.

profile
애플을 좋아한다. 그래서 iOS 개발을 한다. @Kurly

0개의 댓글