Как передать параметр типа enum методу в файле .h и .m - PullRequest
0 голосов
/ 27 октября 2019

В приведенном ниже коде я пытаюсь определить перечисление и передать параметр его типа в метод, упомянутый ниже. Также я создал свойство перечисления того же типа

    @property (readonly, nonatomic) enum adherance adheranceType;

, чтобы разработчик мог получить доступ к значениям перечисления и передать его методу. Однако я получаю сообщение об ошибке:

expression is not an integer constant expression.

Пожалуйста, дайте мне знать, как это исправить

.m

    @interface PlaceView ()
@end

@implementation PlaceView
@synthesize adheranceType;

-(float)placeViews:(NSArray *)uiviews WithAdereanceType:(enum adherance) atype {
 NSInteger iter = 0;
        float totalHeight = 0.0f;

        for (UIView *v in uiviews) {
          if (!v.hidden) {
            if (++iter == 1) {
            totalHeight += totalHeight;
        } else {

            switch (atype) {
                case adheranceType == atype:
                    break;
            }
        }

       }
  }
   return 2.0f;
}

.h

enum adherance {
    FIT_SEAMLESS,
 LOOSE_WITH_GAP,
    TIGHT_OVERLAP
};

@interface PlaceView : NSObject { }

@property (readonly, nonatomic) enum adherance adheranceType;

- (float) placeViews:(NSArray *)uiviews WithAdereanceType: (enum adherance) atype;
@end

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

определите свой enum следующим образом:

typedef NS_ENUM(NSInteger, adherance) {
  FIT_SEAMLESS = 0,
  LOOSE_WITH_GAP,
  TIGHT_OVERLAP
};

определите свой заголовок следующим образом:

@property (readonly, nonatomic) adherance adheranceType;

- (float) placeViews:(NSArray *)uiviews WithAdereanceType:(adherance) atype;

внутри вашего файла .m сделайте следующее:

-(float)placeViews:(NSArray *)uiviews WithAdereanceType:(adherance) atype {
 NSInteger iter = 0;
        float totalHeight = 0.0f;

        for (UIView *v in uiviews) {
          if (!v.hidden) {
            if (++iter == 1) {
            totalHeight += totalHeight;
        } else {

            switch (atype) {
                case FIT_SEAMLESS:
                    break;
              case LOOSE_WITH_GAP:
                    break;
              case TIGHT_OVERLAP:
                    break;
            }
        }

       }
  }
   return 2.0f;
}

удачи

0 голосов
/ 27 октября 2019

Удалить ключевое слово enum из объявления свойства и из параметра

@ interface PlaceView: NSObject {}

@ свойство (только для чтения, неатомное) adherance adheranceType;

  • (float) placeViews: (NSArray *) uiviews WithAdereanceType: (adherance) atype;@ end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...