0

コード化された文字列 "m8" または "w12" があり、それらを日オブジェクト "monday" または "wednesday" と時間オブジェクト "8:00" または "12:00" に展開したいと考えています。私が処理できる時間ですが、Objective-C (iOS) で「m」を「Monday」に変換する簡単な方法 (ブロックで使用できる) を見つけるのに苦労しています...

私は当初、最初の文字を取得することを考えていました (常に 1 つの文字と 1 つまたは 2 つの数字。木曜日は 'h' で、土日は適用されません)。

[codedString substringToIndex:1]  // returns 'm' or 'w', etc... 

次に、switchステートメントを使用して別の変数を 'monday' または 'tuesday' に設定し、数値についても同様のものを設定します。しかし、それから私はあなたがではないことを思い出しswitchましたNSString. では、Objective-C でこのようなことを行うにはどうすればよいでしょうか。

Objective-C と Ruby の間を行き来するのは頭が痛いので、明らかな何かが欠けていることはわかっています...

4

5 に答える 5

4

辞書の仕事のようです!

NSDictionary *stringToDayMap = @{@"m" : @"Monday", @"t" : @"Tuesday", @"w" : @"Wednesday", @"th" : @"Thursday", @"f" : @"Friday", @"s" : @"Saturday"};
NSString *day = [stringToDayMap objectForKey:[codedString substringWithRange:NSMakeRange(0, 1)]]; 
于 2012-11-02T21:21:07.600 に答える
2

任意のCプリミティブ型をオンに切り替えることができます。したがって、1文字の場合は、次のようなことができます。

switch([codedString characterAtIndex:0])
{
     case 'h': NSLog(@"This is Thursday");
     ... etc ...
}

スイッチをオンにしますがunichar、これらは明示的にASCIIのスーパーセットであるため、C文字定数「h」はiOSまたはOSXターゲットに正しくマップされます。

于 2012-11-02T21:13:10.740 に答える
2

文字列をオンにすることはできませんが、文字をオンにすることはできます。

switch([codedString characterAtIndex:0]) {
    case 'm': day = @"Monday";  break;
    case 't': day = @"Tuesday"; break;
    ...
}
于 2012-11-02T21:13:12.623 に答える
2
NSRange dayRange = [@"smtwhfa" rangeOfString:[codedString substringToIndex:1]];
NSString* dayString = [dayArray objectAtIndex:dayRange.location];

dayArray は、@"Sunday"、@"Monday"、... がプリロードされた NSArray です。

(土曜日に使用されている 1 文字がわからない -- 必要に応じて置き換えてください。)

于 2012-11-02T21:18:38.083 に答える
0

必要な値で辞書を作成できます。

NSDictionary *daysOfTheWeek = @{@"m": @"Monday", @"t":@"Tuesday"}; // and so on...
于 2012-11-02T21:20:52.420 に答える