Function 将内联函数定义作为输入参数传递给函数

Function 将内联函数定义作为输入参数传递给函数,function,swift,Function,Swift,比如说,我有一个函数,它接受一个函数作为输入参数之一: // modify passed string func modifyString(paramString: String, modificationFunction: String -> String) -> String { return modificationFunction(paramString) } 现在我可以定义这样一个函数: func addLearningSuffix(inputString: St

比如说,我有一个函数,它接受一个函数作为输入参数之一:

// modify passed string
func modifyString(paramString: String, modificationFunction: String -> String) -> String {
    return modificationFunction(paramString)
}
现在我可以定义这样一个函数:

func addLearningSuffix(inputString: String) -> String {
    var returnString = inputString + " is learning swift"
    return returnString
}
// adds suffix - is learning swift
modifyString("Miraaj",  addLearningSuffix) // returns "Miraaj is learning swift"
// adds prefix - Miraaj
modifyString("is learning swift",{
    (inputString: String) -> String in
    let result = "Miraaj " + inputString
    return result // returns "Miraaj is learning swift"
    })
modifyString(" is learning swift", func addSomeOtherPrefix(inputString: String) -> String{
    return "Miraaj" + inputString
})
然后像这样使用它:

func addLearningSuffix(inputString: String) -> String {
    var returnString = inputString + " is learning swift"
    return returnString
}
// adds suffix - is learning swift
modifyString("Miraaj",  addLearningSuffix) // returns "Miraaj is learning swift"
// adds prefix - Miraaj
modifyString("is learning swift",{
    (inputString: String) -> String in
    let result = "Miraaj " + inputString
    return result // returns "Miraaj is learning swift"
    })
modifyString(" is learning swift", func addSomeOtherPrefix(inputString: String) -> String{
    return "Miraaj" + inputString
})
在上面的例子中,我只是将函数名-addLearningSuffix作为输入参数传递给函数-modifyString,但是如果我想在同一行中定义函数,同时将其作为输入参数传递,该怎么办呢

我知道函数是闭包的特例,所以我可以像这样传递内联闭包:

func addLearningSuffix(inputString: String) -> String {
    var returnString = inputString + " is learning swift"
    return returnString
}
// adds suffix - is learning swift
modifyString("Miraaj",  addLearningSuffix) // returns "Miraaj is learning swift"
// adds prefix - Miraaj
modifyString("is learning swift",{
    (inputString: String) -> String in
    let result = "Miraaj " + inputString
    return result // returns "Miraaj is learning swift"
    })
modifyString(" is learning swift", func addSomeOtherPrefix(inputString: String) -> String{
    return "Miraaj" + inputString
})
或者像这样:

modifyString("is learning swift"){
    (inputString: String) -> String in
    let result = "Miraaj " + inputString
    return result
    }
但是为什么我不能像这样传递内联函数定义:

func addLearningSuffix(inputString: String) -> String {
    var returnString = inputString + " is learning swift"
    return returnString
}
// adds suffix - is learning swift
modifyString("Miraaj",  addLearningSuffix) // returns "Miraaj is learning swift"
// adds prefix - Miraaj
modifyString("is learning swift",{
    (inputString: String) -> String in
    let result = "Miraaj " + inputString
    return result // returns "Miraaj is learning swift"
    })
modifyString(" is learning swift", func addSomeOtherPrefix(inputString: String) -> String{
    return "Miraaj" + inputString
})
正在尝试哪个编译器抱怨:(


如果我做错了什么,请提出建议。

想想声明对象和使用对象之间的区别:

var a = 100
abs(a)
与直接使用它相比:

abs(100)
doThis( { x: String -> return x + " is talking" } )
声明和使用函数之间存在相同的区别:

func talk(x: String) { return x + " is talking" }
doThis(talk)
与直接使用它相比:

abs(100)
doThis( { x: String -> return x + " is talking" } )
书写

doThis( func talk(x: String) { return x + " is talking" } )
就像写作一样

abs(var a = 100)

这没有意义。

您可以,但要避免使用
func
关键字,也就是说,避免声明有趣的内容,但要使用闭包的匿名性质:

modifyString(" is learning swift", { inputString in "Miraaj" + inputString })