Patrick's 데이터 세상

Swift nil, optional 본문

Programming/Swift

Swift nil, optional

patrick610 2020. 6. 23. 00:32
반응형
SMALL

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 강좌

반응형
LIST

'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
Comments