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

标签 ios swift function closures

<分区>

我是 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")
}

当我在 playground/我的应用程序中执行上面的代码时,出现错误“无法通过下标分配:param1 是一个 let 常量”

不确定我哪里出错了。请指导我。请引用 playground 中的确切代码截图 enter image description here

最佳答案

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

如果您确实希望 param1 发生变化并保持其新值,请将其声明为 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 [:]
}

关于ios - 将现有函数作为参数传递给 Swift 3 中的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055449/

相关文章:

ios - 如何检查 SKSpriteNode 在单击时正在运行哪个 SKTexture

javascript - 当元素的 innerHTML 改变时触发一个函数?

javascript - jQuery 查找文本并使用每个函数写入另一个标签属性

ios - 删除 uicollectionview 中的选定单元格

ios - GPPSignIn 委托(delegate)方法未被执行?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

c++ - 是在没有显式强制转换的情况下使用常量调用未定义的行为吗?

ios - 错误 : 'Unsupported predicate in fetch options: mediaType == 2'

javascript - WKWebview javascript 可在模拟器上运行,但如果 View 不在屏幕上,则无法在设备上运行

ios - Swift 如何在 UIViewController 和 UITableViewController 之间创建类似于 UIPageViewController 的效果