将现有函数作为参数传递给 Swift 3 中的另一个函数

Ash*_*shh 5 closures function ios swift

我对 swift 很陌生,正在尝试找到将函数作为参数传递给另一个函数的方法。我的代码结构如下

func createDictionaryFromParams(param1: [String:String], param2: String, param3: String) -> [String:String] {
   param1["name"] = "John"
   param1["university"] = param2
   return [:]
}
func toPassAsParam() -> [String:String] {
   //doStuff
   return [:]
}

public struct passFunction {
   let dict = createDictionaryFromParams(param1: toPassAsParam(), param2: "Texas", param3: "Florida")
}
Run Code Online (Sandbox Code Playgroud)

当我在游乐场/应用程序中执行上述代码时,我收到错误“无法通过下标分配:param1 是一个 let 常量”

不知道我哪里出错了。请指导我。请参阅游乐场中确切代码的屏幕截图在此输入图像描述

Con*_*nor 2

参数值let默认为 s (并且不能改变)。这是您的错误消息的原因 - 它与 的结果无关toPassAsParam()。您可以通过两种方法之一来解决这个问题,具体取决于您是否确实想在函数param1 之外进行更改。

如果您确实想要param1更改并保留其新值,请将其声明为 an inout [String:String]inout关键字意味着它可以在函数中进行更改)。

如果您只想能够在函数内部更改它,您可以var param1 = param1在函数的第一行中说(将其复制到变量)。

关于您的问题的主题行,请多说一点:您没有将函数作为参数传递。您将一个函数的返回值作为参数传递给另一个函数。如果您想将实际函数传递给createDictionaryFromParams,它看起来像:

// note the type of `function`
func createDictionaryFromParams(function: () -> [String:String], 
                                param2: String, 
                                param3: String) -> [String:String] {
    var param1 = function() // now that we passed `function` in, we can call it to get a [String:String]
    param1["name"] = "John"
    param1["university"] = param2
    return [:]
}
Run Code Online (Sandbox Code Playgroud)