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

标签 javascript swift cordova healthkit

我正在为 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/

相关文章:

ios - Swift 2.3 在 pod 更新后使用未解析的标识符 Firebase 'FIR'

javascript - Phonegap 谷歌分析根本不跟踪

javascript - ext js 网格面板滚动条不适用于 jquery

javascript - "object HTMLDivElement"与outerHTML 和replaceWith() 不执行任何操作

javascript - Google 电子表格和工作表

javascript - 无法拖动动态添加的DIV

ios - Xcode 8 语法突出显示不起作用

objective-c - 如何用三角形弹出覆盖来呈现 UIView?

ios - InAppBrowser 在构建后返回到插件列表

cordova - Ionic/Cordova - 什么决定了显示的键盘操作键?