var myName: String? = "Mingu"
print(myName) // Mingu
myName = nil
print(myName) // nil이 출력됨, myName변수를 옵셔널로 선언했기 때문에 nil이 되어도 컴파일 오류가 발생하지 않음.
public enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
init(_ some: Wrapped)
///중략
}
옵셔널 자체가 열거형이기 때문에 옵셔널 변수는 switch 구문을 통해 값이 있고 없음을 확인할 수 있다.
여러 케이스의 조건을 통해 검사하고자 한다면 where 절과 병합해서 사용하면 좋다.
(예제는 생략)
var myName: String? = "Mingu"
var yourName: String! = "Swift"
[강제추출]
print(myName!)
[암시적 추출]
print(myName)
var myName: String? = "Mingu"
//myName이 nil인지 아닌지만 확인하기 위한 용도.
if let _ = myName {
}
//옵셔널 바인딩을 통한 임시 상수 할당
if let myName = myName {
print("My Name is \(myName)")
} else {
print("myName == nil")
}
//My Name is Mingu
//옵셔널 바인딩을 통한 임시 변수 할당
if var name = myName {
name = "wizplan"
print("My name is \(name)")
} else {
print("myName == nil")
}
//My name is wizplan
쉼표(,)를 사용해 바인딩 할 옵셔널을 나열하면 된다.
단, 바인딩하려는 옵셔널 중 하나라도 값이 없다면 해당 블록 내부의 명령문은 실행되지 않는다.
var myName: String? = "Mingu"
var yourName: String? = nil
//friend에 바인딩이 되지 않으므로 실행되지 않음.
if let name = myName, let friend = yourName {
print("We are friend! \(name) & \(friend)")
}