![](/img/trans.png)
[英]Using swift function with return value and completion block in Objective-C
[英]Using predefined function with parameters as completion block in swift
編輯:我認為問題是Swift語法,但問題是我不知道UIViewController.presentViewController為不帶輸入參數的完成處理程序指定了簽名。
我必須為presentViewController提供一個完成處理程序。 我要提供的完成處理程序帶有一個輸入參數。 快速處理此問題的語法是什么?
如果處理程序未采用輸入參數,則它將如下所示:
self.presentViewController(activityVC, animated: true, completion: myHandler)
但是,如果像這樣聲明myHandler,那么上面的行會是什么樣子:
func myHandler(myParameter: AnyObject){
...
}
在問這個問題之前,我應該已經看過presentViewController的聲明 ,但是我對閉包沒有經驗,並認為可以傳遞任何閉包。 事實證明,問題在於presentViewController采用了非常具體的形式關閉
(() -> Void)?
完整的簽名在這里:
func presentViewController(_ viewControllerToPresent: UIViewController,
animated flag: Bool,
completion completion: (() -> Void)?)
因此,答案是presentViewController無法采用本身帶有另一個參數的完成處理程序。
我相信您正在尋找以下方面:
function myHandler(myParameter: (() -> Void)) {
//code here
}
當然-> Void
會根據您是否想要該功能而變化
不幸的是,這行不通。 您不能只傳遞一個對完成塊具有無效類型的函數。 它期望一個沒有任何參數且沒有返回類型/ void
的閉包。 您正在提供一個期望AnyObject
並且不返回/ void
的函數。 因此,預期的(() -> Void)
與提供的((AnyObject) -> Void)
之間不匹配
程序如何知道什么傳遞給myHandler
作為myParameter
?
我能想到的唯一方法是為自定義完成處理程序編寫包裝器:
self.presentViewController(activityVC, animated: true, completion:{self.myHandler("")})
您提供完成塊調用這樣myHandler
但實際上提供了價值myParameter
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.