我正在为 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 动态加载它们,而无需为每个可能的特征更新我的代码和硬编码。
最佳答案
创建从参数字符串到 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]]()
关于javascript - 如果我只有字符串,如何在 Swift 中调用类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162160/