Swift.Optional

junseole·2021년 8월 6일
0

Swift-Basic

목록 보기
1/12
post-thumbnail

스위프트 프로그래밍 3판을 보고 정리한 내용입니다.

스위프트의 특징 중 하나인 안전성(Safe)을 문법으로 담보하는 기능

Optional은 단어 뜻대로 '선택적인' 즉 값이 있을 수도 있고, 없을 수 도 있음 을 나타내는 표현

Optional 사용

Optional 변수 또는 상수가 아니면 nil을 할당 할 수 없다.

var name:String = "junstone1995"
name = nil // 오류가 발생한다.
var name2:String? = "junstone1995"
name2 = nil // 가능하다.

Optional 추출

강제 추출

Optional의 값을 추출하는 가장 간단하지만 가장 위험한 방법

이유는 런타임 오류가 일어날 가능성이 가장 높기 때문이다.

또한 Optional 을 만든 의미가 무색해지는 방법이다.

강제 추출 하려면 Optional 값 뒤에 느낌표(!)를 붙여주면 된다.

만약 값이 nil 이라면 런타임 오류가 발생한다.

var name:String? = "junstone1995"

var nextName:String! = name!
name = nil

nextName = name! //런타임 오류

런타임 오류의 가능성이 있다면 옵셔널 강제 추출은 지양하는 편이 좋다

Optional binding

Optional에 값이 있는지 확인할 때 사용합니다.

Optional에 값이 있다면 Optional에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 Optional이 아닌 형태로 사용할 수 있도록 해준다.

if 또는 while 구문 등과 결합하여 사용가능하다.

var name:String? = "junstone1995"

if let myName = name{
    print("My name is \(myName)")
}else{
    print("name is nil")
}
//My name is junstone1995 을 출력한다.

if var myName = name{
  	myName = "alpha" //내부에서 값을 바꿀 수 있다.
    print("My name is \(myName)")
}else{
    print("name is nil")
}
//My name is alpha 을 출력한다.

var yourName:String? = nil
//friend 가 nil이므로 출력되지 않는다.
if let myName = name, let friend = yourName{
  print("We are friend \(myName) & \(friend)")
}

yourName = "kimleepark"

if let myName = name, let friend = yourName{
  print("We are friend \(myName) & \(friend)")
}
//We are friend junstone1995 & kimleepark 을 출력한다.

암시적 추출 Optional

nil을 할당하고 싶지만 Optional 바인딩으로 매번 값을 추출하기 귀찮거나 로직상 nil때문에 런타임 오류가 발생하지 않을거 같을 때 사용(매우 위험한 생각)

타입 뒤에 물음표(?)대신 느낌표(!)를 사용하면 된다.

var name:String! = "junstone1995"
print(name)
//Optional("junstone1995")이 출력되고 노란색으로 xcode에서 경고를 표시한다.
print(name!)
//junstone1995 이 출력되고 강제적으로 추출하였다.

if let myName = name {
  print("my name is \(myName)")
}else{
  print("nil..")
}
//my name is junstone1995 가 추출된다. 암시적으로 하는 추출도 바인딩이 가능하다. 
profile
Swift와 함께 여행중입니다.

0개의 댓글