簡體   English   中英

快速使用帶有參數的預定義功能作為完成塊

[英]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.

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