是否可以在Swift
??
我在Swift
制作一个声音效果应用,它使用不同的效果,如AVAudioUnitReverb()
和AVAudioUnitDistortion()
等。我想创建一个单一的功能,只能调用哪些效果我想做。
答案 0 :(得分:5)
因为在Swift函数中 第一类 ,所以可以将它作为参数传递给另一个函数。
示例:
func testA() {
print("Test A")
}
func testB(function: () -> Void) {
function()
}
testB(testA)
答案 1 :(得分:1)
您可以将函数作为参数传入我输入具有相同签名的参数。
正如sun的例子只是处理Void参数和返回类型,我想添加另一个例子
func plus(x:Int, y:Int) -> Int {
return x + y
}
func minus(x:Int, y:Int) -> Int {
return x - y
}
func performOperation (x:Int, _ y:Int, op:(x:Int,y: Int) -> Int) -> Int {
return op(x: x, y: y)
}
let resultplus = performOperation(1, 2, op: plus) // -> 3
let resultminus = performOperation(1, 2, op: minus) // -> -1
note :当然您应该考虑动态类型参数。为简单起见,这里只是Ints
这被称为高阶函数,在许多语言中,这就是这样做的方式。但是,你通常不会为它明确创建函数。这里的闭包是一个完美的工具:
函数performOperation
保持不变,但操作的实现方式不同:
let plus = { (x:Int, y:Int) -> Int in
return x + y
}
let minus = { (x:Int, y:Int) -> Int in
return x - y
}
let resultplus = performOperation(1, 2, op: plus)
let resultminus = performOperation(1, 2, op: minus)
这通常是首选,因为它不需要将方法添加到类中,就像其他语言中的匿名函数一样。
更多相关内容以及如何在swift标准库中使用它:https://www.weheartswift.com/higher-order-functions-map-filter-reduce-and-more/
答案 2 :(得分:1)
我建议使用Matt Neuburg的书“IOS 9 Programming Fundamentals with Swift”,特别是章节“功能”。
您不仅应该找到问题的答案:
func imageOfSize(size:CGSize, _ whatToDraw:() -> ()) -> UIImage {
...
}
但是如何构造返回函数的函数:
func makeRoundedRectangleMaker(sz:CGSize) -> () -> UIImage {
...
}
以及Curried Functions的简要介绍。