Swift3-如何按名称调用类或结构函数
由于我来自JS背景,因此我将按存储在变量中的名称调用函数:Swift3-如何按名称调用类或结构函数,swift3,Swift3,由于我来自JS背景,因此我将按存储在变量中的名称调用函数: var obj = { foobar: function(param) { // do something } }; var key = "foobar"; obj[key](123); 现在我想在Swift中重新创建它,例如: struct obj = { func foobar(param) { // do something } } let key:Strin
var obj = {
foobar: function(param) {
// do something
}
};
var key = "foobar";
obj[key](123);
现在我想在Swift中重新创建它,例如:
struct obj = {
func foobar(param) {
// do something
}
}
let key:String = "foobar"
obj[key](123)
不幸的是,上面的代码给出了Type'obj.Type'没有下标成员
有没有办法在结构、类或字典中按名称调用函数(如果可以在Dicts中存储函数的话?)
编辑-更多上下文:
我有一个用户提供的数组,其中包括:
let arr = ["apples", "oranges", "pears"]
但是这个数组可以长达20个项目。根据数组中的每个项,我需要执行某些操作。因此,我迭代数组:
for (key, _) in arr {
if (key == "apples") {
handleApples()
}
if (key == "oranges") {
handleOranges()
}
// and so on...
}
当然,我可以用一个简单的开关
实现一个包含20个案例的功能,但这远远不够理想。如果我的数组增长到100个项目怎么办
我希望实现类似的目标:
for (key, _) in arr {
myClass[key]()
}
我想这可能就是你想要的:
var obj: [String: Int] = {
// do something, like call foobar(param) that's defined outside of the variable
// or just manipulate data directly in here
return ["foobar": 123]
// or whatever dictionary you want that matches the type you defined for obj
}()
如果你不发布你想要的输出或行为,很难给你一个更好的答案。我想这可能就是你想要的:
var obj: [String: Int] = {
// do something, like call foobar(param) that's defined outside of the variable
// or just manipulate data directly in here
return ["foobar": 123]
// or whatever dictionary you want that matches the type you defined for obj
}()
如果你不发布你想要的输出或行为,很难给你一个更好的答案
有没有办法在结构、类或字典中按名称调用函数(如果可以在Dicts中存储函数的话?)
是的,您可以将函数存储到字典中
让我们定义一个函数类型
typealias FuncType = () -> ()
和2个功能
func func0() {
print("Apples")
}
func func1() {
print("Oranges")
}
现在我们可以创建一个字典,其中键是String
,值是FuncType
let dict : [String:FuncType] = [
"Apples" : func0,
"Oranges" : func1
]
当然,我们可以调用存储在字典中的函数
dict["Apples"]?() // prints "Apples"
有没有办法在结构、类或字典中按名称调用函数(如果可以在Dicts中存储函数的话?)
是的,您可以将函数存储到字典中
让我们定义一个函数类型
typealias FuncType = () -> ()
和2个功能
func func0() {
print("Apples")
}
func func1() {
print("Oranges")
}
现在我们可以创建一个字典,其中键是String
,值是FuncType
let dict : [String:FuncType] = [
"Apples" : func0,
"Oranges" : func1
]
当然,我们可以调用存储在字典中的函数
dict["Apples"]?() // prints "Apples"
这是不可能的,因为所有变量/函数名都是在编译时计算的。您试图解决的问题是什么?几乎可以肯定,解决这个问题比使用字符串调用方法要好。@Hamish我已经编辑了我的问题。这是不可能的,因为所有变量/函数名都是在编译时计算的。您试图解决的问题是什么?几乎可以肯定,解决这个问题的方法比使用字符串调用方法要好。@Hamish我编辑了我的问题