Patrick's 데이터 세상
Swift nil, optional 본문
nil
다른 언어의 null에 해당
값이 할당되지 않은 상태
기본 타입(Int, Bool)에도 nil 가능
값이 0과 값이 nil
옵셔널 타입
일반 변수/상수 : nil 대입 불가
옵셔널 타입 : nil을 다룰 수 있는 타입
옵셔널 타입 선언
nil 값이 될 수 있는 변수/상수
타입 뒤에 물음표(?)로 선언
타입 선언 필수
var optionalVar : Optional<Int>
var optionalVar2 : Int?
nil 대입 가능
자동 초기화
결과가 nil이 되는 행위
동작 결과가 nil 가능
결과 타입이 옵셔널 타입
* 타입 변환
let intfromStr = Int("a")
intFromStr // Int?
* 딕셔너리
let numbers = ["one":1, "two":2]
let three = numbers["three"] // int?
* 배열
var array1 : [String]? // 배열 전체 타입 옵셔널
var array2 : [String?] // 배열 원소 안의 타입 옵셔널
* 딕셔너리
var dic1 : [String : Int]? // 딕셔너리 전체 타입 옵셔널
var dic2 : [String :Int?] // 딕셔너리 원소 안의 타입 옵셔널
* 옵셔널 타입의 객체들은 직접적으로 사용이 불가 !
옵셔널 타입의 객체 사용
옵셔널 타입 : nil 이거나 혹은 유효한 값
언래핑 : 옵셔널 타입의 변수에서 유효한 값 얻어오기
nil 여부 비교, 옵셔널 바인딩
옵셔널 체인
강제 언래핑
nil 검사 하기
if, guard
var optionalStr : String?
if optionalStr != nil {
print("nil이 아니다!")
}
else {
print("nil이다")
}
옵셔널 바인딩
* if를 이용한 옵셔널 바인딩
if let realStr = optionalStr {
print("문자열의 값 \(realStr)")
}
else {
print("문자열이 nil이다.")
}
* guard를 이용한 옵셔널 바인딩
바인딩 된 상수의 범위(scope)
func bindingWithWhere() {
guard let val = nilAvailable, val > 0 else {
return; // 0보다 크면서 nil이 아니면 진행, nil이면 return
}
print("val은 유효하고 0보다 큰 값이다. \(val)")
}
* 다중 바인딩, 함수 호출(옵셔널 타입 반환)
if let val1 = someFunc(),
let val2 = anotherFunc() {
// 코드
}
* 옵셔널 바인딩 체인
if let val1 = nilAvailableStr,
let var2 = Int(val1) {
// 코드
}
* 옵셔널 바인딩과 조건 비교
if let val = someFunc(), condition == true {
// 코드
}
* nil 연산자
nil이면 ?? 연산자 이후의 값 사용
기본값 설정으로 활용 가능
var userSelectedColor : String?
// nil 이면 Red를 사용
var colorName = userSelectedColor ?? "Red"
// nil이 아니면 결과를 언래핑해서 사용, nil이면 ?? 연산자 이후 값 사용
옵셔널 체인
* 유효한 값인 경우
var optionalStr : String? = "ABC"
let str = optionalStr?.lowercased()
str // 결과는 옵셔널 Optional("abc")
* nil인 경우
optionalStr = nil
let str2 = optionalStr?.lowercased() // lowercased() 진행 안함
str2 // 결과는 nil
* 프로퍼티 접근/메소드 호출/배열, 딕셔너리 접근 등
let array : [String]? = ["A", "B", "C"]
let str3 = array?[1].lowercased()
출처 : t academy swift 강좌
'Programming > Swift' 카테고리의 다른 글
Swift 클래스 (0) | 2020.06.23 |
---|---|
Swift 함수 (0) | 2020.06.23 |
Swift 반복문, 제어문 (0) | 2020.06.23 |
Swift 다수 데이터 처리 (0) | 2020.06.23 |
Swift 문자, 문자열 (0) | 2020.06.23 |