如果我只有字符串,如何在Swift中调用类方法?

时间:2017-02-10 14:46:29

标签: javascript swift cordova health-kit

我正在为HealthKit编写一个cordova插件,我的任务是确保我们可以动态地从HK读取更多或更少的数据。我在swift做本机部分。但是我主要编写JavaScript,所以我对Swift部分感到有些迷失。

我希望能够动态调用只有字符串的方法。

let store = HKHealthStore()

    do {
        let bloodType: HKBloodTypeObject = try store.bloodType()
...

这是阅读血型的一个例子。我不是Swift开发人员,但有任何方式我可以动态地执行此操作,就像我在javascript中所做的那样:

... // assuming this function receives a string as paramater
let param[0] = try store[param[0]]() // <-- how to do this in Swift?

然后我可以与服务器通信并获取特征列表并从healthkit动态加载它们,而无需为每个可能的特性更新我的代码和硬编码。

1 个答案:

答案 0 :(得分:0)

创建从参数字符串到API枚举的映射。

enum API: String {
    case function1 = "function1"
    case function2 = "functionTwo"
    case function3 = "threethreethree"
}

创建一个将API枚举映射到Swift函数的中继函数。

func callTheCorrectFunction(_ api: API) {
    switch api {
    case .function1: updateBlood()
    case .function2: spinAround()
    case .function3: jump()
    }
}

使用枚举rawValue初始化程序构建您的函数调用。

let param = fromSomeJsonStrings[0]
let api = API(rawValue: param)
callTheCorrectFunction(api)

或者,你可以用同样的方式使用[String: Function]的字典映射。

typealias Function = () -> ()
let dict = {
    "function1": updateBlood,
    "function2": spinAround,
}
dict[param[0]]()