iOS_Swift/2022_Summer
Swift - optional(옵셔널)
chozjjae
2022. 7. 28. 23:31
optional이란 ?
선택적인 이란 뜻을 가진 용어로 값이 있을 수도 있고 없을 수도 있을 때 사용하는 문법입니다.
값이 없다면 ""로 사용하는 것이 아닌 nil 또는 null값이 와야하는데
Swift언어를 사용할때는 nil 값을 사용하기 위하여 optional을 사용합니다.
사용방법
자료형 뒤에 ! 또는 ?
자료형!
자료형?
var name : String? = "cho"
var age : Int = 20
print(name) //일반 타입과는 합쳐지거나 함께 쓰일 수 없다.
print(age)
optional 형태로 사용한다면 출력시 optional로 감싸져서 나옵니다.
이러한 방식을 래핑(wrapping)되었다고 표현합니다.
옵셔널 바인딩
wrapping을 풀어주기 위해서는 unwrapping를 해주어야 하는데 이러한 방식을 옵셔널 바인딩이라고 표현합니다.
명시적 해제, 묵시적 해제
명시적 해제
1. !를 이용한 강제 언래핑
var name : String? = "cho"
var age : Int = 20
print(name) //일반 타입과는 합쳐지거나 함께 쓰일 수 없다.
print(age)
print(name!) //변수 출력시 !를 붙여서 같이 출력하면 언래핑 된 값을 볼 수 있다.
//cho
2. if 또는 guard를 이용한 옵셔널 바인딩
var name : String? = "cho"
var age : Int = 20
print(name) //일반 타입과는 합쳐지거나 함께 쓰일 수 없다.
print(age)
print(name!)
if let man = name{ //옵셔널 바인딩
print(man)
}
func test(){
var he : String? = "chozsta"
guard let mon = he else { return } //함수에서 이뤄지는 옵셔널 바인딩
//값이 없다면 else구문 , 값이 맞거나 있다면 다음 문장을 실행
print(mon) //if문 밖에 있어도 출력시킬 수 있다.
}
test()
묵시적 해제
1. 비교 연산자 사용
var s : Int? = 10
if s == 10 {
print("true")
}
else{
print("false")
}
//true 출력
2. 자료형에 ? 가 아닌 ! 를 사용한다면 묵시적해제
var a : Int! = 10
var b = 20
var c : Int? = 30
print(type(of:a))
print(type(of:b))
print(type(of:c))
let d = a + b
print(type(of:d), d) //30 출력
//print(a+c) //x
//print(b+c) //x