Swiftではenumから文字列とれるのに
Swift から Objective-C にコードを移植しているときに思ったことを...(ついでに解決策も
Swiftで文字列取得
Swift では、enum
で指定したcase
の文字列が取れます
enum BloodType: String {
case A
case B
case O
case AB
}
BloodType.AB.rawValue // "AB"
あまり使わないかもしれないですが、自分は Json をパースする時などに使ってました(Jsonのenum文字列使用例に例を書いておきます)
そこで、これの Objective-C版もお願いとなり移植することに...
Objective-Cで文字列取得
とりあえず、移植してみる
typedef enum {
A,
B,
O,
AB
}BloodType;
BloodType.AB.rawValue // rawValueないよね....
ということで、取れなくて困りました
どうしようかと考えた結果、enumからindex(何番目のcaseか)はとれるので文字列を配列に入れておいて取り出すしかないかなと...
#define BloodTypeArray @"A", @"B", @"O", @"AB", nil
+ (NSString*) BloodTypeToString:(BloodType)value
{
return [[[NSArray alloc] initWithObjects:BloodTypeArray] objectAtIndex:value];
}
// Usage
[[クラス名] BloodTypeToString:AB]; // @"AB"
配列を描くのが少し面倒ですが、1回書いてしまえば、使うのは簡単です
Jsonのenum文字列使用例
Jsonでも使用例が言葉にするのが難しかったので、例を書いてしまおうとw
{
"name":"taro",
"blood":"AB",
"sex":"man",
"age":"30",
"parent_name":{
"father":"takeshi",
"mother":"yuko"
}
}
このようなJsonを解析する場合、2つenumを作るのが良いのかなと
enum Example:String {
case name
case blood
case sex
case age
case parent_name
}
enum Parent_name:String {
case father
case mother
}
// Usage
let json = // Jsonを解析したDictionary
let parent_name = json[Example.parent_name.rawValue] as? Dictionary
let father = parent_name[Parent_name.father.rawValue] as? String
こんな感じで使えます!
jsonの階層をいちいち思い出さなくても良いのと、Key
となる文字列を最初に宣言できる、Key
の追加があっても階層がわかりやすいのでどこに足すかが一目瞭然。
Author And Source
この問題について(Swiftではenumから文字列とれるのに), 我々は、より多くの情報をここで見つけました https://qiita.com/hmhmsh/items/b7ab98d3af29fb966462著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .