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 })
看