LoginSignup
9
7

More than 5 years have passed since last update.

Switchの文字列比較を自作 Objective-C

Last updated at Posted at 2016-01-20

この記事はXcode7.2を使ってます。

Objective-Cのswitch構文には文字列の比較ができない。。

例えばこんな感じ

NSString *test = @"aiueo";
    switch (test) {
        case @"aiueo":
            NSLog(@"ok?");
            break;

        default:
            break;
    }

2行目のswitch (test)でStatement requires expression of integer type.
とエラー

プリプロセッサディレクティブを使ってSwitchを自作する

#define CASE(str) if ([__c__ isEqualToString:(str)])
#define SWITCH(c) for (NSString *__c__=(c);__c__;__c__ = nil)
#define DEFAULT

実態はSWITCHという名のfor構文でループさせ、CASEという名のif構文で文字列の比較を
行う。
実際コードを書いてみると

#define CASE(str) if ([__c__ isEqualToString:(str)])
#define SWITCH(c) for (NSString *__c__=(c);__c__;__c__ = nil)
#define DEFAULT

NSString *str = @"JK";
SWITCH (str) {
    CASE (@"ABCD") {
            NSLog(@"TEST_1");
        break;
    }
    CASE (@"EFJH") {
            NSLog(@"TEST_2");
        break;
    }
    CASE (@"JK") {
            NSLog(@"TEST_3");
        break;
    }
    DEFAULT {
        break;
    }
 }

"TEST_3"が出力される。
エラーにならずにうまくできた!

Xcodeのスニペット登録するといいかも

9
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7