Swift 원본 읽 기: optional 데이터 구조 및 초기 화

1748 단어
먼저 Github 에 optional 소스 주소 첨부
본 고 는 개인 적 으로 Swift 오픈 소스 코드 에 대한 탐색 을 바탕 으로 정확 하지 않 고 수시로 업데이트 할 수 있 으 며 잘못된 부분 이 있 으 면 지적 해 주 십시오!
Optional 형식 데이터 구조 부분 끌 어 내기:
enum Optional : ExpressibleByNilLiteral { 
    case none            //      
    case some(Wrapped)   // The presence of a value, stored as Wrapped.
}

이 를 통 해 알 수 있 듯 이 Optional 은 실제 적 으로 매 거 진 유형 으로 ExpressibleByNil Literal 협 의 를 따 랐 다.
  • ExpressibleByNilLiteral 프로 토 콜: 이 프로 토 콜 은 실현 을 요구 하 는 함수 만 있 습 니 다. nil 로 인 스 턴 스 를 초기 화 하 는 데 사 용 됩 니 다.
  • init(nilLiteral: ())    // Creates an instance initialized with nil.
    

    옵션 이 이 합 의 를 준수 하 는 이 유 는 다음 에 언급 할 것 이다.
  • 두 개의 매 거 진 값 과 초기 화 함수:
  • public init(_ some: Wrapped) { self = .some(some) }
    public init(nilLiteral: ()) {
          self = .none
    }
    

    optional. none: 값 이 부족 하 다 는 뜻 입 니 다.선택 가능 한 형식 은 ExpressibleByNilLiteral 프로 토 콜 에 따라 init(nilLiteral: ()) 이 루어 졌 습 니 다. nil 로 인 스 턴 스 를 초기 화 할 때 컴 파일 러 는 이 함 수 를 'none' 으로 호출 합 니 다.이것 이 바로 선택 할 수 있 는 유형 을 nil 로 초기 화 할 수 있 는 이유 입 니 다.
    var i: Index? = nil
    

    우리 가 선택 할 수 있 는 값 을 설명 하지만 값 을 부여 하지 않 았 을 때 컴 파일 러 도 자동 으로 nil 로 설정 합 니 다.optional. some: 소 포 된 값 이 있 음 을 의미 합 니 다.보 실 수 있 습 니 다. some 매 거 진 값 은 Wrapped 와 관련 된 값 을 가지 고 있 습 니 다. 소 포 된 값 은 여기에 있 습 니 다.그렇다면 Wrapped 는 무엇 일 까요? 제 가 여기 서 찾 은 Wrapped 로 의심 되 는 성명 을 보면 Wrapped 는 실제 협의 입 니 다. getValue 협의 준수 자가 실제 저 장 된 값 을 얻 을 수 있 도록 확 보 했 습 니 다. 실현 은 아직 밝 혀 지지 않 았 습 니 다.
    public protocol Wrapped {
      associatedtype Value : Equatable
      
      //var value : Value
      func getValue() -> Value
    }
    

    다음 편 에 서 는 연산 자의 실현 을 볼 예정 입 니 다.

    좋은 웹페이지 즐겨찾기