NSStringから1文字を取ったらunichar

Javaプログラマ向け、Objective-Cにおける文字列と1文字の扱い。

Javaでは、char型は2バイトのUnicode 1文字を表す。
Objective-Cでは、unichar型が1文字に相当する。

たとえば、Javaでは以下のように、String#charAt で1文字を取得できる。

public class Test {
    public static void main(String[] args) {
        String s = "あいうえお";
        char c = s.charAt(0);

        if ('あ' == c) {        // true
            System.out.format("%c", c);
        }
    }
}

これと同じことをObjective-Cでは以下のように記述できる。

int main(int argc, const char** argv)
{
    @autoreleasepool {
        NSString* s = @"あいうえお";
        unichar c = [s characterAtIndex:0];
        
        if (0x3042 == c) {
            NSLog(@"%C", c);
        }
    }
}

文字リテラルを直接 'あ' と書けないことと、書式化文字列が %C (大文字)であることに注意。

扱う文字がASCIIコードだけであることが明白ならば、以下のようにC言語文字列(char配列)として扱ってもよいだろう。

NSString* s = @"ABCDE";
const char* ptr = [s cStringUsingEncoding:NSASCIIStringEncoding];

if ('A' == ptr[0]) {
    NSLog(@"%c", ptr[0]);
}