Comme indiqué ci-dessous, j'ai déclaré une énumération dans mon fichier d'implémentation et, dans mon interface, une variable de ce type, en tant que PlayerState thePlayerState; et utilisé la variable dans mes méthodes. Mais j'obtiens des erreurs en affirmant que c'est non déclaré. Comment déclarer et utiliser correctement une variable de type PlayerState dans mes méthodes?:
Dans le fichier .m
@implementation View1Controller
typedef enum playerStateTypes
{
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
} PlayerState;
dans le fichier .h:
@interface View1Controller : UIViewController {
PlayerState thePlayerState;
dans une méthode dans le fichier .m:
-(void)doSomethin{
thePlayerState = PLAYER_OFF;
}
Votre typedef
doit figurer dans le fichier d'en-tête (ou dans un autre fichier dont le nom est #import
ed dans votre en-tête), car sinon le compilateur ne saura pas quelle taille utiliser pour PlayerState
ivar. À part ça, ça me va.
Apple fournit une macro destinée à améliorer la compatibilité du code, y compris Swift. Utiliser la macro ressemble à ceci.
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
Dans le .h:
typedef enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
} PlayerState;
Avec les projets en cours, vous souhaiterez peut-être utiliser les macros NS_ENUM()
ou NS_OPTIONS()
.
typedef NS_ENUM(NSUInteger, PlayerState) {
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
};
Voici comment Apple le fait pour des classes comme NSString:
Dans le fichier d'en-tête:
enum {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
typedef NSInteger PlayerState;
Reportez-vous aux directives de codage à l'adresse http://developer.Apple.com/
Je recommande d'utiliser NS_OPTIONS ou NS_ENUM. Vous pouvez en savoir plus à ce sujet ici: http://nshipster.com/ns_enum-ns_options/
Voici un exemple tiré de mon propre code utilisant NS_OPTIONS. J'ai un utilitaire qui définit une sous-couche (CALayer) sur une couche d'UIView pour créer une bordure.
Le H. fichier:
typedef NS_OPTIONS(NSUInteger, BSTCMBorder) {
BSTCMBOrderNoBorder = 0,
BSTCMBorderTop = 1 << 0,
BSTCMBorderRight = 1 << 1,
BSTCMBorderBottom = 1 << 2,
BSTCMBOrderLeft = 1 << 3
};
@interface BSTCMBorderUtility : NSObject
+ (void)setBorderOnView:(UIView *)view
border:(BSTCMBorder)border
width:(CGFloat)width
color:(UIColor *)color;
@end
Le fichier .m:
@implementation BSTCMBorderUtility
+ (void)setBorderOnView:(UIView *)view
border:(BSTCMBorder)border
width:(CGFloat)width
color:(UIColor *)color
{
// Make a left border on the view
if (border & BSTCMBOrderLeft) {
}
// Make a right border on the view
if (border & BSTCMBorderRight) {
}
// Etc
}
@end