簡體   English   中英

在Swift中調用自定義閉包

[英]Calling self-defined closure in Swift

Objective-C中,我可以定義自己的塊類型:

typedef void (^myBlock)(id param1, id param2, BOOL param3);

然后在其他地方(例如另一個類)定義塊體,以使用傳遞的值來做某事,例如:

myBlock block = ^(id param1, id param2, BOOL param3) { 
 if (param3){
   NSLog("parameters:%@,%@",param1,param2)
 }};

為了在Swift中做同樣的事情,我使用typealias定義了我的代碼塊:

typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) -> ()

但我不能簡單地這樣稱呼它:

let block: myBlock = {param1,param2,param3 in 
 if (param3){
     print(param1,param2)
 }}

並且有一個警告:

從未使用不可變值“塊”的初始化; 考慮將其替換為“ _”或將其刪除。

如何在Swift中調用myBlock並定義其主體?

提前致謝!

我認為出現警告是因為您沒有在代碼中的任何地方使用“塊”變量。

聲明“ block”變量后,嘗試在代碼中的某處使用它。

您的聲明沒有任何問題。 但是,正如該詞告訴您的那樣,您只是在聲明一些東西而沒有打電話。 因此,閉包在任何地方都不會被調用。

試試這個

typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) -> ()

let block: myBlock = {(param1,param2,param3) in 
 if (param3){
     print(param1,param2)
 }}

block(param1: 1,param2: 2,param3: true)

當然,您必須用您的值替換實際參數。 您可以在操場上的屏幕截圖中看到它的魅力。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM