[코딩] 배우는것/Swift
[Swift] Optional 옵셔널
JabCho
2020. 7. 8. 19:48
728x90
반응형
SMALL
이전에 했던 optional에 대한 포스팅.
https://alicecodealice.tistory.com/7
[Swfit] Optional 해결방법
앞서 optional이 왜 일어나는지 알아봤다.(nil때문..) 그럼 해결방법은? 간단하게 말하자면 강제 언랩핑(Forced Unwrapping) , 옵셔널 바인딩(Optional Binding) , 옵셔널 체이닝(Optional Chaining)이 있다. 1...
blog.kim-gaeun.com
옵셔널
옵셔널은 값이 있을수도 있고 없을수도 있음(nil)을 표현한 형태이다.
코드
import UIKit
var carName: String? = "뚜벅이"
carName = nil
carName = "람보르기니포르쉐마세라티"
옵셔널 고급기능
1. 강제 언래핑 (Forced unwrapping)
// Forced unwrapping >> 강제로 박스 열기
print(carName!)
2. 옵셔널 바인딩 (Optional binding) - if let
// Optional binding (if let 사용) >> 부드럽게 박스 열기 - 1
if let unwrappedCarName = carName {
print(unwrappedCarName)
}else{
print("car Name 없다")
}
//parsing 해서 casting 한 결과가 옵셔널일 수 있다.
func printParsedInt(from: String){
if let parsedInt = Int(from){ //Cyclomatic complexity (복잡도)
print(parsedInt)
}else{
print("Int로 컨버팅 안된다.")
}
}
printParsedInt(from: "100")
printParsedInt(from: "hello~~!")
3. 옵셔널 바인딩 (Optional binding) - guard
// Optional binding (guard 사용) >> 부드럽게 박스 열기 - 2
func printParsedInt(from: String){
guard let parsedInt = Int(from) else { //복잡도 줄일 수 있는 방법. guard 사용. guard조건 만족안하면 아래 실행.
print("Int로 컨버팅 안된다.")
return
}
print(parsedInt)
}
printParsedInt(from: "100")
printParsedInt(from: "hello~~!")
4. Nil coalescing
// Nil coalescing >> 박스를 열었더니, 값이 없으면 디폴트 값을 준다.
carName = "나의자동차" // --> carName에 "나의자동차"라는 값을 주면
// nil이 아니므로 "나의자동차" 출력됌.
let myCarName:String = carName ?? "뚜벅이와 대중교통" //박스 열어서 값이 없으면 디폴트 값을 준다.
코드 연습
let favoriteFood: String? = "탄산수"
if let food = favoriteFood {
print(food)
}else{
print("좋아하는 음식이 없어")
}
let nickname:String? = "잡초"
//let nickname:String? = nil
func pirntNickname(name:String?){
guard let nickName = name else {
print("별명이 없네")
return
}
print("별명은 \(nickName)")
}
pirntNickname(name: nickname)
728x90
반응형
LIST