Optionals
let stock
위의 예제에서 값을 넣지 않으면 형식추론으로 타입을 유추해야하는데 단서가 되는 값이 없습니다.
그렇기 때문에 컴파일 에러가 납니다.
let stock: int
이런식으로 타입을 선언하면 에러는 사라집니다.
하지만 상수에는 아무 값도 저장되어있지 않기때문에
print(stock) 을 출력하게 되면 컴파일에러가 나게 됩니다.
이런 타입을 Non-optional Type이라고 합니다
변수와 상수는 값을 읽기전에 반드시 초기화 해야 합니다.
또한 변수와 상수는 항상 타입에 맞는 값을 가지고 있어야 합니다.
Optionals type
let str: String = "swift"
이건 non-optional Type입니다.
non-optional type 은 항상 값을 가져야 하며, 그렇기 때문에 아래 예제와 같이
let str: String = nil
비었다는 뜻의 nil을 저장할 수 없습니다.
nil은 값이 없다는걸 나타내는 특별한 값인데
항상 값을 가져야하는 non-optional type에 저장하는 건 말이 안됩니다.
let str: String = "Swift"
let optionalStr: String? = nil
위의 예제의 첫번째 코드는 non-optional type 입니다
두번째 코드는 optional type 입니다.
타입이름 뒤에 ? 를 붙이면 됩니다.
let a: int? = nil
let b = a
optional int를 선언해 보았습니다.
let c: Optional<int> = nil
위의 예제의 Optional<int> 부분을 줄여서 int? 로 적는 것 입니다.
Unwrapping
우선 예제를 하나 적겠습니다.
var num : int? = nil
print(num)
이 소스코드를 출력하면 nil이 출력됩니다.
여기에 num = 123 이라는 값을 넣고 출력을 하게 되면
optional(123) 이라는 값이 나오게 됩니다.
non-optional type에 똑같이 넣어서 출력하게되면
123이라는 값이 정상적으로 나옵니다.
optioanl type은 연관값이라는 특별한 방식으로 값을 저장합니다.
값이 랩으로 포장되어있다고 이해하시면 됩니다.
그래서 값을 사용하려면 값을 꺼내야 합니다.
그래서 이걸 unwrapping == 값을 추출한다 라고 합니다
값을 강제로 추출하는 방법은
Forced Unwrapping 이라고 합니다.
문법은 단순하게
optionalExpression!
옵셔널 뒤에 !를 붙이면 됩니다.
여기에서 !는 강제추출연산자 입니다.
단항후치연산자 이기 때문에 반드시 공백 없이 적어야합니다.
위의 num을 추출해보겠습니다.
print(num!)
이런식으로 소스코드를 적게 되면 123이라는 값이 정상 출력되는걸 확인할 수 있습니다.
optional binding
단순한 문법으로 optional 값을 추출할 수 있습니다.
우선 문법예제입니다.
if let name: Type = OptionalExpression{
statements
}
while let name: Type = OptionalExpression {
statements
}
guard let name: Type = OptionalExpression else {
statements
}
옵셔널 바인딩에서는 일단 옵셔널 표현식을 표현하고
값이 저장되어있다면 값을 언래핑 해서 상수에 저장합니다.
코드의 예제입니다.
var num: Int? = 123
if let n = num{
print(n)
}
위의 바인딩 예제와는 다른점은 print 안에 !가 없다는 것 입니디ㅏ.
이건 강제추출하지 않는다는 것을 의미합니다.
'기초' 카테고리의 다른 글
12. string (0) | 2024.06.02 |
---|---|
11.Functions & Closures (1) | 2024.06.02 |
9.control Tranfer Statements (0) | 2024.06.02 |
8.Range Operators (0) | 2024.06.02 |
7.Conditional Statements (1) | 2024.06.02 |