Sie versuchen, Namespaces für Ihre Enums in Objective-C zu implementieren. In Objective-C ist eine Menge Ellenbogenfett gefragt. Sie sind wahrscheinlich am besten mit C++ dafür, da es einfach und afaik vollständig in jeder iOS oder Cocoa-Anwendung unterstützt wird. Sie müssen die Dateien, die #import
Ihren C++ - Code zu .mm
Dateien anstelle von .m
Dateien umbenennen, und der C++ - Compiler kann kniffliger sein als der Objective-C. Auf dieser Route erstellen Sie eine Header-Datei wie Enums.h
.
// Enums.h
namespace CARS
{
enum CARS
{
ROLLSROYCE
};
}
namespace BEAUTIFULCARS
{
enum BEAUTIFULCARS
{
ROLLSROYCE = 45
};
}
Und in Ihrem .mm
Quell
#import "Enums.h"
-(void)printEnumvals
{
NSLog(@"CARS %d BEAUTIFULCARS %d",
CARS::ROLLSROYCE,
BEAUTIFULCARS::ROLLSROYCE);
}
Wenn Sie C++ für diese Lösung vermeiden wollen, gibt es viel mehr Fett Ellenbogen, Buchhaltung und Gelegenheit für Fehler. Dazu benötigen Sie eine Kopfzeile und eine Quelldatei.
// CARS.h
@interface BEAUTIFULCARS : NSObject
{
enum
{
BEAUTIFULCARS_ROLLSROYCE = 45
} BEAUTIFULCARS;
}
@end
@interface CARS : NSObject
{
enum
{
CARS_ROLLSROYCE
} CARS;
}
@end
// CARS.m
@implementation BEAUTIFULCARS
+(NSInteger)ROLLSROYCE{ return BEAUTIFULCARS_ROLLSROYCE; }
@end
@implementation CARS
+(NSInteger)ROLLSROYCE{ return CARS_ROLLSROYCE; }
@end
Ihre .m
Quelle ist fast das gleiche:
#import "CARS.h"
-(void)printEnumvals
{
NSLog(@"CARS %d BEAUTIFULCARS %d",
CARS.ROLLSROYCE,
BEAUTIFULCARS.ROLLSROYCE);
}
Objective-C nicht Umfang in der gleichen Art und Weise gelingt, die meisten anderen OO-Sprachen zu tun. Schnittstellen definieren die Eigenschaften und Meldungen, die ein Objekt unterstützt, das von der Schnittstelle unterstützt wird, unterstützen jedoch keine Schutzstufen wie öffentlich oder privat. Wenn Sie eine Enum in einem @interface
definieren, endet diese Enum im globalen Gültigkeitsbereich.
@Thomson Beteiligt: dies nicht funktioniert ///// Namespace TEST { \t Enum TEST { \t \t ABC, \t \t DEF \t}; } – Oliver
@Thomson Comer: Der Compiler sagt "erwartet '='". "Etc ... 'asm' oder '_attribute_' vor 'TEST' – Oliver
@Oliver, haben Sie vergessen, die Quelldatei umzubenennen, die diesen Namespace-Code enthält zu einer '.mm' Datei Namespaces werden in Objective-C nicht unterstützt, denen immer' .m' vorangestellt wird. Wenn Sie einen Namespace verwenden, müssen Sie ihn als C++ Code behandeln, der eine Suffix der Quelldatei erfordert ' .mm'. –