iOS Swift(스위프트) : 옵셔널 값처리
iOS 앱 개발을 위해 Swift(스위프트) 공부한 것을 메모한 글입니다.
옵셔널 타입은 연산이나 결합이 안됨
연산을 하려면 해제(언래핑) 해야 함
해제 방식 : 명시적 해제 / 묵시적 해제
명시적 해제 : 강제(많이 씀) / 비강제
묵시적 해제 : 컴파일러에 의한 자동 해제 / 연산자를 사용한 자동 해제
강제 해제 : 옵셔널 값의 nil 여부와 관계 없이 무조건 해제하는 방식
방법 : 옵셔널 타입의 값 뒤에 '!' 기호만 붙여주면 됨 # ! = 강제 해제 연산자
#var optInt: Int? = 3
print("옵셔널 자체 값 : \(optInt)" // 옵셔널 자체 값 : Optional(3)
print("!로 강제 해제 : \(optInt!)" // !로 강제 해제 : 3
#Int("123")! + 30 //153
값이 nil인 옵셔널 변수에 !를 붙이면 오류가 나므로 강제 해제할땐 옵셔널 값이 nil인지 점검해야 함
# var str ="123"
var intFromStr = Int(str) // intFromStr 상수도 옵셔널 타입으로 정의됨 //Optional(123) 이 대입됨
if intFromStr != nil {} else {} // != 반드시 앞에 공백을 넣어줘야 함, 강제 해제 연산자 !와 구분하기 위함
옵셔널 바인딩 : 조건문 내에서 일반 상수에 옵셔널 값을 대입하는 방식
반드시 조건문에서 사용해야 함, 대입 결과는 true/false
# var str = "Swift"
if let intFromStr = Int(str) { } else { } //자연스럽게 옵셔널 타입이 해제됨
intFromStr이 상수로 선언됐고 옵셔널이 아닌 일반 타입임
#guard 구문(#false일때 실행되는 것)
func intStr(str: String) {
guard let intFromStr = Int(str) else { return }
프린트
}
#절대 nil값이 들어가지 않을 때에는 강제 해제 연산자를 사용해 옵셔널 타입을 처리하는 것이 효율적임
#딕셔너리는 기본적으로 옵셔널 타입으로 정의된 값을 반환함, 키가 없을 경우 nil을 반환해야 하므로..
var a = ["kr" : "seoul", ...]
print(a["kr"]) // Optional("Seoul")
print(a["kr"]) // Seoul
#nil 여부를 체크하고 쓰는 것이 맞음
#if (a["kr"] != nil) {} or 옵셔널 바인딩 : if let val = a["kr"] {}
컴파일러에 의한 옵셔널 자동 해제
옵셔널 객체의 값을 비교 연산자로 비교하는 경우 자동해제 됨
한쪽이 옵셔널, 다른 한쪽이 일반 타입일 경우 자동 해제
let t = Int("123")
t == 123 //true t == Optional(123) //true
옵셔널 값 할당
var ot = optional(123)
var ot : Int? = 123 //타입 어노테이션을 써야함
옵셔널의 묵시적 해제 : 옵셔널 변수를 사용하는 모든 경우에 적용되며 타입 선언시 묵시적 해제를 미리 선언해줘야함
묵시적 옵셔널 선언
# var str: String! = "Swift" // !(느낌표)의 차이, 일반 선언은 ?(물음표)
print(str) //Swift Optional
# var v1: Int? = 10
v1 + 5 //오류
var v2: Int! = 10
v2 + 5 //15
편리하지만 변수의 값이 nil이 될 가능성이 있다면 묵시적 옵셔널 해제를 쓰면 안됨
묵시적 옵셔널 해제를 사용하는 경우 : 형식상 옵셔널로 정의해야 하지만, 실제로 사용할 때는 절대 nil 값이 대입될 가능성이 없는 변수일 때
#실제 묵시적 옵셔널이 유용하게 사용되는 경우는 클래스나 구조체 내에서임
'기타' 카테고리의 다른 글
iOS Swift(스위프트) : 플, 배열, 딕셔너리, 셋 (0) | 2020.01.03 |
---|---|
한국사를 공부하는 효과적인 방법 (0) | 2019.08.10 |
[Android] 앱에서 플레이스토어 링크 공유하는 기능 만들기(Create a playstore link sharing app in your app) (0) | 2019.06.15 |
iOS Swift(스위프트) : 함수의 기본 개념 (0) | 2019.05.22 |
iOS Swift(스위프트) : 옵셔널 (0) | 2019.05.21 |
iOS Swift(스위프트) : 딕셔너리 (0) | 2019.05.21 |
iOS Swift(스위프트) : 튜플 (0) | 2019.05.19 |
iOS Swift(스위프트) : 집합 연산 (0) | 2019.05.19 |