현제의 현재이야기

[swift] 기초 문법 4일차 본문

IOS/swift

[swift] 기초 문법 4일차

현재의 현제 2022. 9. 11. 23:07

옵셔널

스위프트의 대표적인 특징이라는 옵셔널을 배웠다.

옵셔널 값을 추출하는데는 if let을 사용한 옵셔널 바인딩과 !를 이용한 옵셔널 벗기기가 있다.

import UIKit

var address: Int? = nil

if let yourAddress: Int = address{
    print("당신의 주소는 \(yourAddress) 입니다.")
} else{
    print("아직 주소가 배정되지 않았습니다.")
}

//아직 주소가 배정되지 않았습니다.

이렇게 값이 없는 nil을 사용할 수 있다.

 

암시적 옵셔널과 그냥 옵셔널과의 차이점

import UIKit

var address: Int! = 500

address = address + 2

if let yourAddress: Int = address{
    print("당신의 주소는 \(yourAddress) 입니다.")
} else{
    print("아직 주소가 배정되지 않았습니다.")
}
//당신의 주소는 502 입니다.

--------------------------------
import UIKit

var address: Int? = 500

address = address + 2

if let yourAddress: Int = address{
    print("당신의 주소는 \(yourAddress) 입니다.")
} else{
    print("아직 주소가 배정되지 않았습니다.")
}
//MyPlayground.playground:5:11: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
address = address + 2
          ^

암시적 옵셔널은 기존 변수처럼 사용할 수 있지만, 옵셔널은 기존 변수처럼 사용이 불가능하다.

그러나 ? 옵셔널도 변수에 값을 넣을 수 있다.

var optionalTwo: Int? = nil
optionalTwo = 23

if let check = optionalTwo{
    print(check)
}
optionalTwo = 25

if let check = optionalTwo{
    print(check)
}
//23
//25

 

이렇게 옵셔널은 두개의 값도 넣을 수 있다.

import UIKit

var address: Int? = 500
var name : String? = "이현제"

if let yourAddress = address,
    let yourName = name{
    print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다.")
} else{
    print("아직 주소가 배정되지 않았습니다.")
}
//당신의 주소는 500이고, 이름은 이현제 입니다.

만약 하나가 충족되지 않으면

 import UIKit

var address: Int? = 500
var name : String? = nil

if let yourAddress = address,
    let yourName = name{
    print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다.")
} else{
    print("주소나 이름이 배정되지 않았습니다.")
}
//주소나 이름이 배정되지 않았습니다.

이렇게 뜬다.

import UIKit

var address: Int? = 500
var name : String? = "이현제"

if let yourAddress = address, yourAddress > 400,
    let yourName = name{
    print("당신의 주소는 \(yourAddress)이고, 이름은 \(yourName)입니다. 주소는 400이 넘습니다.")
} else{
    print("주소나 이름이 배정되지 않았습니다.")
}
//당신의 주소는 500이고, 이름은 이현제입니다. 주소는 400이 넘습니다.

또한 이렇게 조건도 지정할 수 있다. 알고리즘 짤 때 배열 안의 값이 없냐 있냐 이런거 짤 때 유용할 것 같다.

 

옵셔널 벗기기

 

옵셔널에 값이 있다고 가정하고 !를 붙여서 강제로 옵셔널을 벗겨준다.

var name : String? = "이현제"
print(name)
//Optional("이현제")

---------

var name : String? = "이현제"
print(name!)
//이현제
var name : String?
print(name!)
//Fatal error: Unexpectedly found nil while unwrapping an Optional value

그런데 변수에 저장된 값이 nil일 경우에는 런타임 에러가 발생한다.

!를 붙이면 강제 벗기기이다. 근데 이 역시 값이 없으면 오류가 뜬다.

 

파이썬에 없던 개념이라 조금 어려웠다. 아자아자 홧팅

'IOS > swift' 카테고리의 다른 글

[swift] 기초 문법 6일차(클로저)  (0) 2022.09.13
[swift] 기초 문법 5일차  (0) 2022.09.12
[swift] 기초 문법 3일차  (0) 2022.09.10
[swift] 기초 문법 2일차  (0) 2022.09.08
[swift] 기초 문법 1일차  (0) 2022.09.07
Comments