Search
Duplicate

(Swift) 스위프트 Optionals 기본 개념

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Swift
Scrap
태그
9 more properties

Optionals

Swift를 공부하다보면 특정 타입 뒤에 ? 혹은 !가 따라 나오는 것을 볼 수 있다. 이 때, 이 기호들이 바로 Optional정보를 나타낸다.
DataType <var hardness: String?> Optional
Swift
복사
Swift는 DataType을 가진 기본 변수에 nil(C로 치면 null)을 넣을 수 없다. 생각해보면 맞는 말이다. nil은 String이라고 할 수 없기 때문... 즉, Optional이 해주는 역할은 아래와 같다
이 변수에는 값이 있을 수도, 없을 수도 있다!
그래서 Swift에서는 타입 뒤에? 를 붙이면서 값이 없을 수도 있다는 상황을 알려주는 것이다.

Example

var player1Username: String = nil // error var player1Username: String? = nil // OK var player1Username: String? // OK (위와 동일) player1Username = "username"
Swift
복사
만약 위 변수를 그냥 출력하면 아래와 같은 결과를 얻을 수 있다.
print(player1Username)
Swift
복사
우리가 원하는 결과는 "username"인데 Optional() 이라는 블록 안에 값이 나오고 있다. 왜 이런 결과가 생기는 걸까?

Wrapping

그 이유는 바로 Wrapping이다. Optional 타입은 기본적으로 wrap되어 있는 이다. 즉, Optional로 선언된 변수들은 값이 있는 것인지, nil인 것인지 wrap되어 있어서 모르는 상태이다. 그렇기 때문에(컴파일러 입장에서는 변수가 nil일 수도 있기 때문에) wrap된 상태에서는 설령 변수에 value값이 있다고 하더라도 바로 value가 출력되지 않는다.(Swift 3.0에서 반영된 사항) 
var optionalString: String? =Helloprint(optionalString) // 출력 결과: Optional(“Hello”)
Swift
복사
이 경우, optionalString이 nil일 수도 있기 때문에, 결과값 “Hello”가 출력되지 않고, Optional(“Hello”) 가 콘솔창에 출력된다.

그렇다면 그냥 원하는 값만 출력하려면 어떻게 해야할까?

방법은 간단하다 바로 Forced Unwrapping을 사용하는 것이다.
print(optionalString!)> Forced Unwrapping
Swift
복사
이 때, optionalString이 nil이면 error가 날 수 있다. 따라서 if문을 통해 안전한 프로그래밍을 하는 것을 추천한다.
if optionalString != nil { print(optionalString!) }
Swift
복사