Declarei uma enumeração no meu arquivo de implementação, como mostrado abaixo, e declarei uma variável desse tipo na minha interface como PlayerState thePlayerState; e usei a variável em meus métodos. Mas estou recebendo erros afirmando que não está declarado. Como declaro e uso corretamente uma variável do tipo PlayerState nos meus métodos?
No arquivo .m
@implementation View1Controller
typedef enum playerStateTypes
{
PLAYER_OFF,
PLAYER_PLAYING,
PLAYER_PAUSED
} PlayerState;
no arquivo .h:
@interface View1Controller : UIViewController {
PlayerState thePlayerState;
em algum método no arquivo .m:
-(void)doSomethin{
thePlayerState = PLAYER_OFF;
}
iphone
objective-c
c
RexOnRoids
fonte
fonte
Respostas:
Você
typedef
precisa estar no arquivo de cabeçalho (ou em algum outro arquivo#import
inserido no cabeçalho), porque, caso contrário, o compilador não saberá qual o tamanho para criar oPlayerState
ivar. Fora isso, parece bom para mim.fonte
NS_ENUM
no Objective-C se quiser que sua enumeração esteja disponível no código Swift.typedef
declarado no.m
arquivo e ele compila e roda bem.A Apple fornece uma macro para ajudar a fornecer melhor compatibilidade de código, incluindo Swift. Usar a macro fica assim.
Documentado aqui
fonte
NS_ENUM
), pois é mais moderna e agora é necessária no Objective-C se você deseja que sua enumeração esteja disponível no código Swift.No .h:
fonte
Nos projetos atuais, convém usar as
NS_ENUM()
ouNS_OPTIONS()
macros.fonte
NS_ENUM
no Objective-C se quiser que sua enumeração esteja disponível no código Swift.É assim que a Apple faz isso para classes como o NSString:
No arquivo de cabeçalho:
Consulte Diretrizes de codificação em http://developer.apple.com/
fonte
Eu recomendo usar NS_OPTIONS ou NS_ENUM. Você pode ler mais sobre isso aqui: http://nshipster.com/ns_enum-ns_options/
Aqui está um exemplo do meu próprio código usando NS_OPTIONS, eu tenho um utilitário que define uma subcamada (CALayer) na camada de um UIView para criar uma borda.
O h. Arquivo:
O arquivo .m:
fonte