2019. 4. 18. 13:14ㆍSwift + iOS
옵셔널
옵셔널이란? 값이 있을수도 있고, 없을 수도 있는 것입니다.
스위프트의 키워드 Safe, Fast, Interactive 중에 가장 중요하게 생각하는 것이 'Safe' 입니다.
옵셔널은 Safe를 가장 잘 대변할 수 있는것입니다.
Int: 주황색 공간 안에 값이 무조건 있다는 것을 언어적으로 보장할게.
Int?: 주황색 공간 안에 값이 있을 수도 있고, 없을 수도 있다. 값이 있으면 보호막 안에 값을 넣어 놓고, 없으면 보호막만 넣어 놓을게.
Objective-C 에서는 파라미터등의 문서를 보면 'This value must not be nil' 이런 문구가 설명되어 있었다. 그래서 다른 프로그래머와 일 할 때 그 값이 nil인지 아닌지 하나하나 체크해야 했고, 심지어 자기 자신도(!!!) 이 값이 nil인지 아닌지 확인해 봐야 했다. 미래의 나는 과거의 나를 믿을 수 없지...
그런데 지금 Swift에서는 문서 등을 볼 필요도 없이 옵셔널 키워드 등을 통해 바로 nil 이 들어와도 되는지 들어오면 안되는지 알 수 있다.
인스턴스를 생성하다보면 엑스코드의 자동완성 목록에 Int, Int? 이런식으로 물음표가 붙어있는 값이 있는 경우가 있다.
이런 경우는 뒤의 파라미터에 따라 인스턴스가 생성이 되는지 안되는지 갈리게 된다.
Int: 뒤의 파라미터에 상관없이 무조건 인스턴스가 생성될거야.
Int?: 뒤의 파라미터에 따라 인스턴스가 생성이 안 될 수도 있어~
요런 뜻!
옵셔널 언래핑
옵셔널 바인딩
// Objective-C
if(someObject != nil) {
//nil 체크를 제대로 하지 않는다면 프로그램이 죽는 문제가 발생한다.(crash)
}
Objective-C일 때는 옵셔널인 값을 위의 방식을 사용해서 체크 했었다. 이 nil 체크를 제대로 하지 않으면 프로그램이 죽는 문제가 발생하게 된다.
스위프트에서는 박스(보호막)한테 노크를 해서 nil값인지 아닌지 물어보는 방식을 사용한다.
노크하는 방법: if let, guard let ..
옵셔널 체이닝
! 를 사용한 강제 추출
강제 추출 방식은 쾅ㅋ왘와코아쾅카ㅗ아콩카ㅓㅇㅋ아 해서 상자를 부셔버리는 것이다. 만약에, 부셨는데 값이 없으면 CRASH가 발생해서 프로그램이 죽는다.
이렇게 강제 추출을 하면 실행 중에 오류가 발생해 앱이 죽어버린다... 우리는 저 값이 화아아아악실 하게 있는지 없는지 모르고 있었다고 해도 언제 없어지게(!!!) 바뀔지도 모르니까 !를 이용한 강제 추출은 사용을 안 하는 것이 좋다. 그런데 Xcode는 느낌표 붙여서 해결하라고 자꾸 떠든다. Xcode 미워.
암시적 추출 옵셔널
선언부에 !가 들어있는 경우
기본적으로 강제로 빼오는 형태를 취하는 옵셔널
옵셔널이기 때문에 옵셔널 바인딩을 사용할 수 있음.
1. 옵셔널은 왜 써야 하는가?
2. 옵셔널은 바인딩을 통해 정중하게 노크하고 들어가자~ 낰낰
3. 선언할 때 특별한 이유가 없는 한 ?로 선언합시다~~
'Swift + iOS' 카테고리의 다른 글
iOS. 네비게이션 컨트롤러 (0) | 2019.07.30 |
---|---|
Swift. 클로저(Closures) (0) | 2019.05.07 |
Swift. Extension (0) | 2019.04.25 |
Xcode. Xcode 디버깅 팁 (7) | 2019.04.22 |