[英]Swift Array of Self-defined Objects Contains: Requires to Insert 'where:'
[英]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.