func someFunction(someOptionalParam: Int?) {
//
}
func someFunction(someParam: Int) {
//
}
someFunction(someOptionalParam: nil) <- 가능
someFunction(someParam: nil) <- 불가능
명시적 표현
안전한 사용
enum Optional<Wrapped>: ExpressibleByNiliteral {
case none
case some<Wrapped>
}
let optionalValue: Optinal<Int> = nil
let optionalValue: Int? = nil
느낌표(!)
를 이용한 암시적 추출 옵셔널var optinalValue: `Int!` = 100
switch optinalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
- 기존 변수처럼 사용 가능, 다른 수를 넣고 계산을 할수 있다
optinalValue = optinalValue + 1
- nil 할당 가능
optinalValue = nil
- 단, nill과의 연산은 불가능 - 잘못된 접근으로 인한 런타임 오류 발생
optinalValue = optinalValue + 1 (에러)
물음표(?)
를 이용한 옵셔널var optionalValue: `Int?` = 100
switch optionalValue {
case .none:
print("this is Optional variable is nil")
case .some(let value):
print("value is \(value)")
}
- 기존 변수처럼 사용 불가, 옵셔널과 일반값은 다른 타입으로 연산이 안된다, 즉 다른 수를 넣고 계산하는것이 불가능하다
optionalValue += 1 (에러)
- nil 할당 가능
optionalValue = nil
func printName(what_your_name: String) {
print(name)
}
var myName: String? = nil
옵셔널타입으로 타입이 달라서 출력 불가
//printName(what_your_name: myName) <- ERROR
//if - let 사용
if let name: String = myName {
printName(what_your_name: name)
} else {
print("no_name")
}
myName = "woonsik"
var yourName: String? = "byeori"
//if - let 쉼표를 이용한 연속 사용
if let name1: String = myName, let name2: String = yourName{
print("my name is \(name1) and his name is \(name2), nice to meet you !")
} else {
print("nill case")
}
var Myname: String? = "woonsik"
var Yourname: String! = "byeori"
print(**myName!**)
print(**Yourname!**)
뒤에 느낌표(!)
를 붙여서 출력한다. nil이 들어있을경우 컴파일 에러가 발생하므로 위험하다
후에 옵셔널 체이닝과 옵셔널 바인딩의 콜라보가 나온다