Swift 閉包
Swift閉包是Swift函數(shù)的另一種類型,可以在不使用關(guān)鍵字func和函數(shù)名的情況下定義。愛掏網(wǎng) - it200.com
與Swift函數(shù)類似,Swift閉包也可以接受參數(shù)和返回值。愛掏網(wǎng) - it200.com它還包含一組在調(diào)用后執(zhí)行的語句,并且可以像函數(shù)一樣分配給變量/常量。愛掏網(wǎng) - it200.com
主要有兩個原因使用Swift閉包:
完成塊
閉包用于在某個任務(wù)執(zhí)行完成后提供通知。愛掏網(wǎng) - it200.com
高階函數(shù)
閉包可以作為高階函數(shù)的輸入?yún)?shù)傳遞。愛掏網(wǎng) - it200.com高階函數(shù)是一種接受函數(shù)作為輸入并返回類型為函數(shù)的值的函數(shù)類型。愛掏網(wǎng) - it200.com在這種情況下,閉包被用于省略了func關(guān)鍵字和函數(shù)名,使代碼更易讀和簡潔。愛掏網(wǎng) - it200.com
語法
{ (parameters) -> return type in
statements
}
在這里, in 是一個關(guān)鍵字,用于在閉包中分隔返回類型和語句。愛掏網(wǎng) - it200.com閉包可以接受參數(shù)和返回值。愛掏網(wǎng) - it200.com
讓我們創(chuàng)建自己的閉包:
示例
簡單閉包
let simpleClosure = {
}
simpleClosure()
這里,我們聲明了一個簡單的閉包 { },它不接受任何參數(shù),不包含任何語句,也不返回任何值。愛掏網(wǎng) - it200.com這個閉包被賦值給常量simpleClosure。愛掏網(wǎng) - it200.com
包含語句的閉包
示例
let simpleClosure = {
print("Hello JavaTpoint")
}
simpleClosure()
輸出:
Hello JavaTpoint
在上面的程序中,我們定義了一個名稱為simpleClosure的閉包,它被推斷為() -> (),因為它不接受任何參數(shù),并且不返回任何值。愛掏網(wǎng) - it200.com
包含參數(shù)的閉包
示例
let simpleClosure:(String) -> () = { name in
print(name)
}
simpleClosure("Hello JavaTpoint")
輸出:
Hello JavaTpoint
在上面的程序中,類型閉包(String) ->()接受一個類型為字符串的輸入,但不返回值。愛掏網(wǎng) - it200.com為了在閉包的語句中使用傳遞的值,我們在參數(shù)名name后面加了in關(guān)鍵字。愛掏網(wǎng) - it200.com
在這里,閉包接受一個字符串,我們在調(diào)用閉包時需要傳遞字符串,例如simpleClosure(“Hello JavaTpoint”)。愛掏網(wǎng) - it200.com
返回值的閉包
閉包可以像函數(shù)一樣返回值。愛掏網(wǎng) - it200.com要從閉包返回一個值,我們必須在括號()內(nèi)明確添加要返回的類型,然后使用 ->。愛掏網(wǎng) - it200.com
示例
let simpleClosure:(String) -> (String) = { name in
let greeting = "Hello JavaTpoint " + "A platform for all technologies"
return greeting
}
let result = simpleClosure("Hello JavaTpoint")
print(result)
輸出:
Hello JavaTpoint A platform for all technologies
您可以看到,在上述程序中,我們將類型定義為 **simpleClosure: (String) – > (String) ** 因為Swift無法自動推斷返回值的閉包類型。愛掏網(wǎng) - it200.com類型 (String) -> (String) 指定閉包需要一個類型為String的輸入,并且返回一個類型為String的值。愛掏網(wǎng) - it200.com