我正在为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动态加载它们,而无需为每个可能的特性更新我的代码和硬编码。
答案 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]]()