我必须为presentViewController提供一个完成处理程序。我想提供的完成处理程序采用输入参数。在swift中处理这个的语法是什么?
如果处理程序没有输入参数,它将如下所示:
self.presentViewController(activityVC, animated: true, completion: myHandler)
但是如果myHandler声明如下,上面的行怎么看:
func myHandler(myParameter: AnyObject){
...
}
答案 0 :(得分:1)
在问这个问题之前我应该看一下declaration of presentViewController,但我对闭包没有经验,并认为任何关闭都可以通过。事实证明,问题是presentViewController采用了一种非常具体的形式闭包
(() -> Void)?
完整的签名在这里:
func presentViewController(_ viewControllerToPresent: UIViewController,
animated flag: Bool,
completion completion: (() -> Void)?)
所以答案是presentViewController不能接受一个本身需要另一个参数的完成处理程序。
答案 1 :(得分:0)
我相信您希望执行以下操作:
function myHandler(myParameter: (() -> Void)) {
//code here
}
当然-> Void
会根据您是否需要该功能而改变
答案 2 :(得分:0)
不幸的是,这不起作用。您不能只传入一个完成块类型无效的函数。它期望一个没有任何参数的闭包,并且没有返回类型/ void
。您提供的函数需要AnyObject
并且不返回任何/ void
。因此,预期(() -> Void)
与提供的((AnyObject) -> Void)
该程序如何知道将myHandler
传递给myParameter
的内容?
我能想到的唯一方法就是为自定义完成处理程序编写一个包装器:
self.presentViewController(activityVC, animated: true, completion:{self.myHandler("")})
这样您就可以提供一个调用myHandler
的完成块,但实际上会为myParameter
提供一个值。