Skip to content

Commit bffc3d8

Browse files
committed
Modified enum paradigm
1 parent afa34f0 commit bffc3d8

File tree

2 files changed

+84
-22
lines changed

2 files changed

+84
-22
lines changed

Templates/ObjC/Models/EnumType.h.tt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
<#@ include file="SharedObjC.template.tt"#>
44
<#
55
var entity = host.CurrentType.AsOdcmEnum();
6+
var typeName = GetObjCTypeIdentifier(entity);
7+
var valueTypeName = typeName + "Value";
68
#>
79

810
#include <Foundation/Foundation.h>
911

10-
typedef NS_ENUM(NSInteger, <#=GetObjCTypeIdentifier(entity)#>){
12+
typedef NS_ENUM(NSInteger, <#=valueTypeName#>){
1113

1214
<#
1315
foreach(var member in entity.Members.OrderBy(x => x.Value))
@@ -17,12 +19,30 @@ foreach(var member in entity.Members.OrderBy(x => x.Value))
1719
<#
1820
}
1921
#>
20-
<#=GetObjCTypeIdentifier(entity)#>EndOfEnum
22+
<#=typeName#>EndOfEnum
2123
};
2224

23-
@interface NSString (<#=GetObjCTypeIdentifier(entity)#>)
25+
@interface <#=typeName#> : NSObject
2426

25-
+ (instancetype) stringWith<#=GetObjCTypeIdentifier(entity)#>:(<#=GetObjCTypeIdentifier(entity)#>)val;
26-
- (<#=GetObjCTypeIdentifier(entity)#>) to<#=GetObjCTypeIdentifier(entity)#>;
27+
<#
28+
foreach (var member in entity.Members.OrderBy(x => x.Value))
29+
{
30+
#>
31+
+(<#=typeName#>*) <#=member.Name.ToUpperFirst()#>;
32+
<#
33+
}
34+
#>
35+
36+
+(<#=typeName#>*) <#=typeName.ToLowerFirst()#>WithEnumValue:(<#=valueTypeName#>)val;
37+
38+
@property (nonatomic, readonly) <#=typeName#>Value enumValue;
39+
40+
@end
41+
42+
43+
@interface NSString (<#=typeName#>)
44+
45+
+ (instancetype) stringWith<#=typeName#>:(<#=typeName#>*)val;
46+
- (<#=typeName#>*) to<#=typeName#>;
2747

2848
@end

Templates/ObjC/Models/EnumType.m.tt

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,88 @@
33
<#@ include file="SharedObjC.template.tt"#>
44
<#
55
var entity = host.CurrentType.AsOdcmEnum();
6+
var typeName = GetObjCTypeIdentifier(entity);
7+
var valueTypeName = typeName + "Value";
68
#>
79

8-
#include <<#=GetObjCTypeIdentifier(entity)#>.h>
10+
#include <<#=typeName#>.h>
911

10-
@implementation NSString (<#=GetObjCTypeIdentifier(entity)#>)
12+
@interface <#=typeName#> () {
13+
<#=valueTypeName#> _enumValue;
14+
}
15+
16+
@implementation <#=typeName#>
17+
18+
<#
19+
/////////////////////////////////////////////////////////////////
20+
// Generate the static methods that look like [DayOfWeek Monday]
21+
/////////////////////////////////////////////////////////////////
22+
foreach (var member in entity.Members.OrderBy(x => x.Value))
23+
{
24+
#>
25+
+(<#=typeName#>*) <#=member.Name.ToUpperFirst()#> {
26+
static <#=typeName#> *_<#=member.Name.ToLowerFirst()#>
27+
static dispatch_once_t onceToken;
28+
dispatch_once(&onceToken, ^{
29+
_<#=member.Name.ToLowerFirst()#> = [[<#=typeName#> alloc] init];
30+
_<#=member.Name.ToLowerFirst()#>._enumValue = <#=GetObjCEnumMember(entity, member)#>;
31+
});
32+
return _<#=member.Name.ToLowerFirst()#>;
33+
}
34+
<#
35+
}
36+
#>
37+
<#
38+
///////////////////////////////////////////////////////////////
39+
// Generate conversion from enum to boxed type and vice versa
40+
// e.g. [DayOfWeek dayOfWeekWithEnumValue:DayOfWeekMonday]
41+
///////////////////////////////////////////////////////////////
42+
#>
43+
+(<#=GetObjCTypeIdentifier(entity)#>*) <#=GetObjCTypeIdentifier(entity).ToLowerFirst()#>WithEnumValue:(<#=valueType#>)val {
44+
45+
}
46+
47+
- (<#=valueTypeName#>) enumValue {
48+
return _enumValue;
49+
}
50+
51+
@end
52+
53+
@implementation NSString (<#=typeName#>)
1154

12-
+ (instancetype) stringWith<#=GetObjCTypeIdentifier(entity)#>:(<#=GetObjCTypeIdentifier(entity)#>)val {
55+
+ (instancetype) stringWith<#=typeName#>:(<#=typeName#>)val {
1356

14-
switch(val)
57+
switch(val.enumValue)
1558
{
16-
<#
59+
<#
1760
foreach(var member in entity.Members)
1861
{
19-
#>
20-
case <#=GetObjCEnumMember(entity,member)#>:
62+
#>
63+
case <#=GetObjCEnumMember(entity,member)#>:
2164
return @"<#=member.Name#>";
22-
<#
65+
<#
2366
}
24-
#>
25-
case <#=GetObjCTypeIdentifier(entity)#>EndOfEnum:
67+
#>
68+
case <#=typeName#>EndOfEnum:
2669
default:
2770
return nil;
2871
}
2972

3073
return nil;
3174
}
3275

33-
- (<#=GetObjCTypeIdentifier(entity)#>) to<#=GetObjCTypeIdentifier(entity)#>{
76+
- (<#=typeName#>*) to<#=typeName#>{
3477

3578
<#
3679
foreach(var member in entity.Members)
3780
{
3881
#>if([self isEqualToString:@"<#=member.Name#>"])
39-
{
40-
return <#=GetObjCEnumMember(entity,member)#>;
41-
}
42-
else <#
43-
}
44-
#>
4582
{
83+
return [<#=typeName#> <#=GetObjCEnumMember(entity,member)#>];
84+
}
85+
else <#
86+
}
87+
#>{
4688
return <#=GetObjCTypeIdentifier(entity)#>EndOfEnum;
4789
}
4890
}

0 commit comments

Comments
 (0)