[Swift] Optional 정리
Swift Optional 정리
Optional 구글 번역기로 번역할 시 선택 과목이라고 변역되며 변수에 nil 타 언어는 Null을 관리하기 위한 방법이라고 이해했다.
어떠한 변수 Input이 데이터가 있는게 아닌 nil로 올 수 있기 때문에 Optional을 사용하는 것 같다.
Optional
📕 코드
let myName: String = nil
어떠한 변수에는 일정한 값이 있을 수 있지만 아무것도 없을 수 있다.
이럴 경우
error: 'nil' cannot initialize specified type 'String'
다음과 같은 에러가 뜨게 된다.
이럴 경우를 방지하기 위해 Optional을 사용한다.
📕 코드
let myName: String? = nil
포맷에 '?'를 붙일 경우 Optional로 에러가 뜨지 않고 nil값과 String값을 동시에 변수, 상수에 할당할 수 있다.
📕 코드
let myName: String? = "Minsu"
print(myName)
위의 코드를 print한다면
Optional("Minsu")
값 뿐만이 아닌 Optional이 추가적으료 표시되고 안 쪽에 value가 표시된다.
그러면 이제 위의 Optional을 순수하게 값만 받아오는 4가지 방법을 사용해보자
Force unwrapping
단순하게 변수 혹은 상수이름 뒤에 '!'를 붙여주는 것만으로 값을 받을 수 있다.
📕 코드
print(myName!)
Minsu
그러나
📕 코드
let myName: String? = nil
print(myName)
print(myName!)
이렇게 nil값이 들어왔다면 결과값은 어떻게 나올까??
💡결과
nil
__lldb_expr_140/MyPlayground.playground:13: Fatal error: Unexpectedly found nil while unwrapping an Optional value
다음과 같이 에러메시지가 발생한다.
그럼 nil값을 받더라도 에러없이 출력하는 다른 방법도 알아보자.
Optional Binding
Optional Binding은 2가지의 방법이 있으며 nil값을 확인하고 출력할 수 있는 방법이 생긴다.
- if - let을 사용하는 방법
📕 코드
let myName: String? = "Minsu"
if let name: String = myName {
print(name)
} else {
print("Not Name")
}
다음과 같이 optional 변수 혹은 상수를 다른 상수에 넣어 if문을 구성하는 것으로
만약 값이 있을 경우 if문 값이 없는 nil일 경우 else문이 동작하게 된다.
📕 코드
if let name: String = myName {
print(name)
} else {
print("Not Name")
}
💡결과
Minsu
📕 코드
let myName: String? = nil
if let name: String = myName {
print(name)
} else {
print("Not Name")
}
💡결과
Not Name
- guard를 사용하는 방법
📕 코드
func optionalBinding(yourName: String?) {
guard let name: String = yourName else {
print("No Name")
return
}
print(name)
}
guard를 사용한 함수를 구현했다.
만약 yourName이 nil일 경우
💡결과
No Name
값이 있을 경우
💡결과
Minsu
로 출력이 된다. nil값일 경우 else문을 통과하며 만약 return이 없으면
💡결과
'guard' body must not fall through, consider using a 'return' or 'throw' to exit the scope
다음과 같은 에러가 뜨니 주의해야한다.
yourName에 값이 있을 경우 else문을 통과하지않고 guard문을 통과해 맨 밑의 print문을 동작시켰다.
Nil-Coalescing
Nil병합 문이라고도 하며 변수 값에 '??'를 사용하여 nil일 경우 default 값을 주며 값이 있을 경우 그 값을 사용하는 것이다.
📕 코드
var myName: String? = nil
print(myName ?? "Jihoon")
💡결과
Jihoon
📕 코드
var myName: String? = "Minsu"
print(myName ?? "Jihoon")
💡결과
Minsu
위 두개의 코드를 보면 알겠지만 변수 ?? defaultValue로 변수가 nil일 경우 defaultValue를 변수에 넣고
기존 변수 값이 있는경우 그 값 그대로를 사용한다.
참고
Author And Source
이 문제에 관하여([Swift] Optional 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minsu3007/Swift-Optional-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)