将内联匿名函数解析为命名函数

时间:2015-06-25 20:55:19

标签: swift

以下代码正确打印true或false,具体取决于字符串是否包含元音。这是使用匿名函数,闭包,捕获变量等的简写格式。

let s = "hello"
println(contains(s,{contains("aeiou",$0)}))

我正在尝试将其解析为具有显式参数的单独命名函数

let s = "hello"
func myFunction(c: Character)->Bool {
    return contains(s,c)
}

println(contains(s,myFunction(???))

适当的函数定义和后续调用是什么?

2 个答案:

答案 0 :(得分:0)

我认为@stklieme没有解决OP的问题,因为代码以相反的顺序传递params。使用外部函数调用匿名闭包需要您在闭包中命名参数,如下所示:

let s = "hello"

//println(contains(s, {contains("aeiou",$0)}))

func myFunction(c: Character) -> Bool {
    return contains("aeiou", c)
}

println(contains(s, { (c: Character) -> Bool in return myFunction(c) }))

答案 1 :(得分:-1)

您可以使用传递两个参数的“传统”函数

func myFunction(c: Character, string : String) -> Bool
{
  return contains(s,c)
}

println(myFunction("f", "Hello")) // false

或可以捕获字符串参数的闭包

let s = "hello"
var myClosureFunction = { (c: Character) -> Bool in
  return contains(s,c)
}

println(myClosureFunction("o")) // true