52가지 유효한 방법(5) - 상태, 옵션, 상태 코드를 매거로 표시

5157 단어

열거(enum)

  • 매거(enum)는 단지 상수의 명명 방식일 뿐이다.는 C 언어의 기본 데이터 유형이며 명명된 정수 상수의 집합입니다.
  • 규범의 정의 코드의 상태, 옵션 등'상량'.
  • 은 메모리 사용과 방출에 관여하지 않습니다.
  • 이 개발에서 매거진을 사용하는 목적은 코드의 가독성을 높이기 위한 것이다.

  • NSENUM 및 NSOPTIONS 매크로는 열거 유형을 정의하고 기본 데이터 유형을 나타냅니다.

  • NS_ENUM NS_ENUM 기본값
  • /* NS_ENUM supports the use of one or two arguments. The first argument is always the integer type used for the values of the enum. The second argument is an optional type name for the macro. When specifying a type name, you must precede the macro with 'typedef' like so:
     
    typedef NS_ENUM(NSInteger, NSComparisonResult) {
        ...
    };
     
    If you do not specify a type name, do not use 'typedef'. For example:
     
    NS_ENUM(NSInteger) {
        ...
    };
    */
     
    #define NS_ENUM(...) CF_ENUM(__VA_ARGS__)
  • NS_OPTIONS NS_OPTIONS 일반적으로 위치 이동 관련 조작을 정의하는 매거값
    #define NS_OPTIONS(_type, _name) CF_OPTIONS(_type, _name)
  • 열거(Enum) 및 상태(states)


    어떤 대상이 겪는 여러 가지 상태를 하나의 매거 집합으로 정의할 수 있습니다 (enumeration set)
    typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
        UIViewAnimationTransitionNone,
        UIViewAnimationTransitionFlipFromLeft,
        UIViewAnimationTransitionFlipFromRight,
        UIViewAnimationTransitionCurlUp,
        UIViewAnimationTransitionCurlDown,
    };
  • 컴파일러는 매개 값에 하나의 독특한 번호를 분배한다. 0부터 순서대로 1을 추가한다.
  • 바이트는 최대 0~255개 총 256개(2^8)의 매개 변수를 나타낼 수 있다.

  • 매거(enum)와 옵션(options)


    옵션을 정의할 때 매거 형식을 사용해야 합니다.이 옵션들이 서로 조합될 수 있다면 더욱 그렇다.매거 정의가 맞기만 하면, 각 옵션 사이에는 '비트나 조작부호' 를 통해 조합할 수 있다.
    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
        UIViewAutoresizingNone                 = 0,
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
        UIViewAutoresizingFlexibleWidth        = 1 << 1,
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
        UIViewAutoresizingFlexibleHeight       = 1 << 4,
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    };
  • 옵션은 비트 연산 방식으로 정의된
  • UIViewAutoresizingNone                            0 0 0 0 0 0 0 0
    UIViewAutoresizingFlexibleLeftMargin              0 0 0 0 0 0 0 1
    UIViewAutoresizingFlexibleWidth                   0 0 0 0 0 0 1 0
    UIViewAutoresizingFlexibleRightMargin             0 0 0 0 0 1 0 0
    UIViewAutoresizingFlexibleTopMargin               0 0 0 0 1 0 0 0
    UIViewAutoresizingFlexibleHeight                  0 0 0 1 0 0 0 0
    UIViewAutoresizingFlexibleBottomMargin            0 0 1 0 0 0 0 0
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight 
                                                      0 0 0 1 0 0 1 0
  • 2비트로 왼쪽으로 이동)
  • 은 하나의 연산자 대상의 각 2진법 위치를 모두 왼쪽으로 몇 자리 옮긴다(왼쪽의 2진법 위치는 버리고 오른쪽은 0)
  • 조작수는 왼쪽마다 한 자리씩 이동하는데 이 수에 2
  • 을 곱한 것과 같다
  • 예: 3<<2 이후 결과는 12 3의 2진법 11으로 왼쪽으로 두 자리를 옮긴 후 오른쪽에 2개의 0을 추가하면 1100이다.1100에서 10진법으로 12으로 전환했다.
  • 좌회전 조작은 22차방 ×3에 해당한다.왼쪽으로 1번 이동할 때마다 1
  • 증가
  • >> 기호 오른쪽으로 이동(n>>2에서 정형값 기호 오른쪽으로 2비트)
  • 은 한 수의 각 2진법 위치를 모두 오른쪽으로 몇 자리 옮기고 정수는 0, 음수는 1, 오른쪽은 버린다.
  • 은 오른쪽으로 한 명씩 이동하여 2으로 나눈 다음
  • 을 정돈합니다.
  • 예: 9>>1 이후 4 9의 2진법은 1001이고 오른쪽으로 1자리를 옮긴 후 왼쪽 정수는 0을 보충하고 오른쪽으로 버린다.결과는 0100이었다.10진법으로 전환한 후 4으로 변경됩니다.


  • 매거(enum)와 상태 코드(codes)


    매거용법도 switch 문장에 사용할 수 있다.매거 유형을 처리하는 switch 문장에서 default 지점을 실현하지 마라.
    typedef NS_ENUM(NSUInteger, EOCConnectionState) {
        EOCConnectionStateDisconnected,
        EOCConnectionStateConnecting,
        EOCConnectionStateConnected
    };
    
    switch (_currentState) {
        EOCConnectionStateDisconnected:
          //...
          break;
        EOCConnectionStateConnecting:
          //...
          break;
        EOCConnectionStateConnected:
          //...
          break;
    }

    요점

  • 은 상태기의 상태, 전달 방법의 옵션과 상태 코드 등 값을 매거로 표시하고 이 값들을 감청 네트워크 상태의 매거와 같은 알기 쉬운 이름을 지어야 한다.
  • 만약에 어떤 방법에 전달되는 옵션을 매거 유형으로 표시하고 여러 옵션을 동시에 사용할 수 있다면 각 옵션을 2의 멱으로 정의하여 위치나 조작을 통해 조합할 수 있도록 한다.
  • NS_ENUMNS_OPTIONS 매크로로 매거 유형을 정의하고 그 밑바닥 데이터 유형을 가리킨다.이렇게 하면 매거진이 개발자가 선택한 하위 데이터 형식으로 이루어지고 컴파일러가 선택한 형식을 사용하지 않는다는 것을 확보할 수 있다.
  • 은 매거 유형을 처리하는 switch 문장에서 default 지점을 실현하지 못한다.이렇게 하면 새로운 매거진을 추가하면 컴파일러는 개발자에게 switch 문장이 모든 매거진을 처리하지 않았다고 알린다.
  • 좋은 웹페이지 즐겨찾기