是否可以在Swift
中調用函數作爲另一個函數的參數?是否可以在Swift中將函數作爲另一個函數的參數調用?
我在做一個Swift
聲音效果的應用程序,它使用像AVAudioUnitReverb()
和AVAudioUnitDistortion()
等等。我想創造一個單一的功能,只是能夠打電話我想做哪個效果不同的效果。
是否可以在Swift
中調用函數作爲另一個函數的參數?是否可以在Swift中將函數作爲另一個函數的參數調用?
我在做一個Swift
聲音效果的應用程序,它使用像AVAudioUnitReverb()
和AVAudioUnitDistortion()
等等。我想創造一個單一的功能,只是能夠打電話我想做哪個效果不同的效果。
由於夫特功能一流類型,可以把它作爲一個參數傳遞給另一功能。
例子:
func testA() {
print("Test A")
}
func testB(function:() -> Void) {
function()
}
testB(testA)
您可以通過功能作爲參數我的打字具有相同簽名的參數。
隨着陽光的例子只是虛空涉及的參數和返回類型,我想補充另一個例子
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
注:當然,你應該考慮動態類型的參數。爲了簡單起見,這裏只是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)
通常會是首選,因爲它並不需要方法被添加到一個類,非常像其他語言的匿名函數。
越來越它是如何在迅速的標準庫使用:https://www.weheartswift.com/higher-order-functions-map-filter-reduce-and-more/
我建議書「雨燕與IOS 9編程基礎」由馬特·諾伊堡,特別是子章「功能」。
你不僅要找到適合您的問題的答案:
func imageOfSize(size:CGSize, _ whatToDraw:() ->()) -> UIImage {
...
}
而且如何構造函數,返回功能:
func makeRoundedRectangleMaker(sz:CGSize) ->() -> UIImage {
...
}
除了簡要介紹了咖喱功能。
您可以傳遞函數作爲函數的參數。您可以直接或通過名稱傳遞函數。 –