Javascript 如果我只有字符串,如何在Swift中调用类方法?
我正在为HealthKit编写一个cordova插件,我的任务是确保我们可以动态地从香港读取更多或更少的数据。我在斯威夫特演本地部分。但我主要写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() ... 这是一个读取血型的示例。我不是一个敏捷的开发人员,
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的确切功能,但希望这能为您指明正确的方向。