枚举类型:从密钥获取原始值

时间:2017-06-30 02:50:59

标签: ios swift mobile-development

如何从枚举中获取原始值传递键值?必须适用于任何类似于枚举类型扩展的枚举类型。 欢迎任何镜像反射,可映射或RawRepresentable解决方案。

我想要这样的事情:

enum Test : String { 
     case One = "1" 
}

Test.rawValueFromKey(keyValue: "One") // Must return "1"
// I don't want the solution below, I must get the rawValue through the key name as String.
Test.One.rawValue

我需要让rawValue将键的名称作为String传递。否则,我将需要进行切换或许多if / else条件。我有一个很大的枚举,我不想检查交换机中传递的字符串,例如并传递Test.One.rawValue。我想直接通过键得到rawValue作为String,就像在字典中一样。

我也不想要下面的代码,因为我有40个项目的枚举,我认为切换40个项目很难看。

switch keyValue {
      case "One":
          return Test.One.rawValue
          break
}

我想要这样的事情:

func rawValueFromKey (keyValue: String) -> Test {
    // code here to get the rawValue through the keyValue as String
    // return the proper Test Enum
}

我尝试了一些可能的解决方案,使用镜像反射和枚举迭代来通过keyValue查找rawValue但是没有用。

请在Swift 2和3中提供解决方案。

由于

1 个答案:

答案 0 :(得分:0)

据我所知,您无法反映类型,因此我认为您只能使用import csv import pandas as pd df = pd.DataFrame( data=[[ 0, 0, 2, 5, 0], [1478, 3877, 3674, 2328, 2539], [1613, 4088, 3991, 6461, 2691], [1560, 3392, 3826, 4787, 2613], [1608, 4802, 3932, 4477, 2705], [1576, 3933, 3909, 4979, 2685], [ 95, 229, 255, 496, 201], [ 2, 0, 1, 27, 0], [1438, 3785, 3589, 4174, 2215], [1342, 4043, 4009, 4665, 3033]], index=['05-01-11', '05-02-11', '05-03-11', '05-04-11', '05-05-11', '05-06-11', '05-07-11', '05-08-11', '05-09-11', '05-10-11'], columns=['R003', 'R004', 'R005', 'R006', 'R007'] ) myDATA=df.to_dict(); header=myDATA.keys() with open("TestTry.csv", "w") as g: writer = csv.DictWriter(g, delimiter=",", fieldnames=header,lineterminator='\r\n') writer.writeheader() for row in myDATA: writer.writerow(row) 或使用本地化字符串来映射值/键来实现此目的。你不得不以某种方式映射。