Chapter 3: Variables and Simple Types - (2)

캣코타·2022년 5월 15일
0
post-thumbnail

Lazy Initialization of Instance properties

왜 사용하는가?(=언제 사용하는가)

  1. 실제 해당 변수를 필요하게 되기 전까진 초기화하고 싶지 않을 때
  2. instance형태로 refer(언급)하고 싶을 때

주의점

  • global variable 과는 다르게 thread safe하지 않음
    = lazy 키워드를 붙인 인스턴스에 동시접근하는 경우 인스턴스가 한 개 이상 만들어질 수 있음

어떻게 thread safe하게 구현할 수 있는가?

  • DispatchSemaphore 이용
  • 그 외 무엇이 있을까?

어떻게 사용하는가

class Example {
    lazy var image: UIImage = {
    	let testImage = UIImage(systemName: "circle")
        ....
        
        return testImage
	}()
}

Numeric Types

  • Int, Double, CGFloat, Float, UInt, CDouble 등등 다양한 Numeric Type존

Numeric Coercion이란?

  • Numeric타입에서 다른 Numeric타입으로 타입을 바꾸는 것

컴파일러의 Numeric type 결정예시

  • 타입을 명시하지 않는 한 정수는 Int로 추론
  • Double과 Int의 연산
    • Double로 타입이 결정됨
  • CGFloat : architecture에 따라 Double 혹은 Float로 인식가능한 타입
  • Double과 Int가 서로 계산 가능한 것과 달리 CGFloat와 Float는 서로 combine(+,- 등) 불가능

Signed & Unsigned Integer

  • Signed Integer : Int8, Int16 등등
  • Unsigned Interger : UInt8, UInt16 등등

Signed Integer 간의 Coercion

  • overflow(혹은 underflow)하게 타입이 바뀌는 상황을 대비해 runtime error가 나지 않도록 하는 방법
 let number: Int16 = 130
 let exactlyNumber = Int8(exactly: number)
 let clampingNumber = Int8(clamping: number)
 
 print(exactlyNumber) // nil
 print(clampingNumber) // 127
profile
to be iOS Developer

0개의 댓글