Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我只有字符串,如何在Swift中调用类方法?_Javascript_Swift_Cordova_Healthkit - Fatal编程技术网

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

Javascript 如果我只有字符串,如何在Swift中调用类方法?,javascript,swift,cordova,healthkit,Javascript,Swift,Cordova,Healthkit,我正在为HealthKit编写一个cordova插件,我的任务是确保我们可以动态地从香港读取更多或更少的数据。我在斯威夫特演本地部分。但我主要写JavaScript,所以我对Swift部分有点迷茫 我希望能够动态调用只有字符串的方法 let store = HKHealthStore() do { let bloodType: HKBloodTypeObject = try store.bloodType() ... 这是一个读取血型的示例。我不是一个敏捷的开发人员,

我正在为HealthKit编写一个cordova插件,我的任务是确保我们可以动态地从香港读取更多或更少的数据。我在斯威夫特演本地部分。但我主要写JavaScript,所以我对Swift部分有点迷茫

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

let store = HKHealthStore()

    do {
        let bloodType: HKBloodTypeObject = try store.bloodType()
...
这是一个读取血型的示例。我不是一个敏捷的开发人员,但有没有什么方法可以像在javascript中那样动态地完成这项工作:

... // assuming this function receives a string as paramater
let param[0] = try store[param[0]]() // <-- how to do this in Swift?
..//假设此函数接收字符串作为参数

让param[0]=尝试存储[param[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()
    }
}
使用enum的
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]]()

创建从参数字符串到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()
    }
}
使用enum的
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]]()

有什么我不明白的吗?或者最后你还在硬编码updateBlood()、spinAround()等等?我的意思是。。。您必须在某个时候对该方法进行硬编码。这样您就知道要调用什么方法了。不过,这只是引入了字符串和函数之间的映射。我理解,但我也遇到了同样的问题。问题是,随着苹果扩展HKHealthStore,我希望能够在不修改插件的情况下动态读取新属性。。。所以我需要能够做HKHealthStore['somethingNew']()不,这可以解决你的问题。假设您想从JSON文件中读取字符串“bio”,并调用
HKHealthStore
中的
biologicalEx()
函数。在最底层,您只需要一个函数,它接受一个字符串,执行一个if语句(即if string==“bio”),然后调用
biologicalSex()
。我给了你一个更安全的版本,但想法是一样的。啊,我理解。你在寻找“反射”-例如,我不确定Swift的确切功能,但希望这能为你指明正确的方向。是否有什么我不明白的地方,或者最后你还在硬编码updateBlood()、spinAround()等?我的意思是。。。您必须在某个时候对该方法进行硬编码。这样您就知道要调用什么方法了。不过,这只是引入了字符串和函数之间的映射。我理解,但我也遇到了同样的问题。问题是,随着苹果扩展HKHealthStore,我希望能够在不修改插件的情况下动态读取新属性。。。所以我需要能够做HKHealthStore['somethingNew']()不,这可以解决你的问题。假设您想从JSON文件中读取字符串“bio”,并调用
HKHealthStore
中的
biologicalEx()
函数。在最底层,您只需要一个函数,它接受一个字符串,执行一个if语句(即if string==“bio”),然后调用
biologicalSex()
。我给了你一个更安全的版本,但想法是一样的。啊,我理解。您正在寻找“反射”——例如,我不确定Swift的确切功能,但希望这能为您指明正确的方向。