由于我有 JS 背景,这就是我通过存储在变量中的名称调用函数的方式:
var obj = {
foobar: function(param) {
// do something
}
};
var key = "foobar";
obj[key](123);
Run Code Online (Sandbox Code Playgroud)
现在我想在 Swift 中重新创建它,例如:
struct obj = {
func foobar(param) {
// do something
}
}
let key:String = "foobar"
obj[key](123)
Run Code Online (Sandbox Code Playgroud)
不幸的是上面的代码给出了Type 'obj.Type' has no subscript members
有没有办法通过结构、类或字典中的名称调用函数(如果甚至可以在字典中存储函数?)
编辑-更多背景:
我有一系列用户提供的内容:
let arr = ["apples", "oranges", "pears"]
Run Code Online (Sandbox Code Playgroud)
但这个数组最多可以有 20 项。根据数组的每一项,我需要执行某些操作。所以我迭代数组:
for (key, _) in arr {
if (key == "apples") {
handleApples()
}
if (key == "oranges") {
handleOranges()
}
// and so on...
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以拥有一个switch包含 20 个案例的简单函数,但这远非理想。如果我的数组增长到 100 个项目怎么办?
我希望能够实现类似的目标:
for (key, _) in arr {
myClass[key]()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过结构、类或字典中的名称调用函数(如果甚至可以在字典中存储函数?)
我们定义一个函数类型
typealias FuncType = () -> ()
Run Code Online (Sandbox Code Playgroud)
和 2 个功能
func func0() {
print("Apples")
}
func func1() {
print("Oranges")
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以创建一个字典,其中键是String,值是FuncType
let dict : [String:FuncType] = [
"Apples" : func0,
"Oranges" : func1
]
Run Code Online (Sandbox Code Playgroud)
当然,我们可以调用存储在字典中的函数
dict["Apples"]?() // prints "Apples"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |