Slide 1

Slide 1 text

Box C String Tip potatotips #7 @SCENEE / iOS

Slide 2

Slide 2 text

ࣗݾ঺հ • @SCENEE : “Shin Yamamoto” • iOSΞϓϦέʔγϣϯ։ൃ • UIEvolution K.K. (ຊࣾ͸Seattle)

Slide 3

Slide 3 text

Box C String • @()ͷBoxϦςϥϧͰɺchar* ΍ɺconst char *͔ΒNSString΋ੜ੒Ͱ͖· ͢ɻ • ※Τϯίʔυ͕UTF8Ͱɺ\0͕ऴ୺ͷจࣈྻΛ ૝ఆ͍ͯ͠·͢

Slide 4

Slide 4 text

Use cases • libXMLͰɺύʔεͨ͠஋ΛNSString΁ม׵͢ Δͱ͖ • C༝དྷͷϥΠϒϥϦͷจࣈྻΛϩάग़ྗ͢Δͱ ͖

Slide 5

Slide 5 text

Use cases • libXMLͰɺύʔεͨ͠஋ΛNSString΁ม׵͢ Δͱ͖ • C༝དྷͷϥΠϒϥϦͷจࣈྻΛϩάग़ྗ͢Δͱ ͖ • One More!!

Slide 6

Slide 6 text

Macroͷreplacement token ΛNSStringͰऔಘ͢Δ

Slide 7

Slide 7 text

↓ͷΑ͏ʹMacroͷ஋Λ char*ͱͯ͠ औΓग़ͯ͠ɺNSStringͱͯ͠ѻ͑Δ #define __str(x) #x #define str(x) __str(x) #define FOO foo ! ! { NSLog(@"%@", @(str(FOO))); ——> “foo” }

Slide 8

Slide 8 text

͜ΕΛԠ༻͢Δͱ͜ΜͳϞσ ϧίʔυ͕ॻ͚·͢

Slide 9

Slide 9 text

·ͣɺҎԼͷΑ͏ʹmacroͰɺ͋Δ ActionΛఆٛ͠·͢ɻ #pragma mark ########################### ! #define __str(x) #x #define str(x) __str(x) ! #define Action1 saltAction #define Action2 garlicAction #define Action3 wasabiAction ! #pragma mark ###########################

Slide 10

Slide 10 text

࣍ʹɺ͜ΕΛར༻ͯ͠ɺUITableView༻ ͷϝχϡʔϞσϧΛ࡞Δͱ @interface PTMenu() @property NSArray *menuList; @end ! @implementation PTMenu ! - (instancetype)init { self = [super init]; if (self) { self.menuList = @[@{TITLE : @"Salt", ACTION : @(str(Action1)":")}, // ACTION : [NSString stringWithUTF8String:str(Action1)":"]}, @{TITLE : @"Garlic", ACTION : @(str(Action2)":")}, @{TITLE : @"Wasabi", ACTION : @(str(Action3)":")}, ]; } return self; }

Slide 11

Slide 11 text

͜Μͳ෩ʹɺSELΛ࢖ͬͯ ηϧબ୒࣌ͷϩδοΫΛॻ͚Δʂ #pragma mark - UITableView delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath { NSString *action = self.menuList[indexPath.row][ACTION]; SEL selector = NSSelectorFromString(action); if ([self respondsToSelector:selector]) { [self performSelector:selector withObject:self];// NOTE: Waring͸ɺ Actionͷϝιου͕ఆٛ͞Ε͍ͯΕ͹໰୊ͳ͍ɻ } } ! #pragma mark - Actions ! - (void)Action1:(id)sender { UIAlertView *av = [[UIAlertView alloc] init]; av.title = @(str(Action1)); [av addButtonWithTitle:@"OK"]; av.cancelButtonIndex = 0; [av show]; }

Slide 12

Slide 12 text

References • http://stackoverflow.com/questions/195975/ how-to-make-a-char-string-from-a-c-macros- value • http://gcc.gnu.org/onlinedocs/cpp/ Stringification.html#Stringification