我正在学习Swift语言,但我无法将可选的回调参数传递给函数:
func dismiss(completion: () -> Void) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
这显示了一个错误 - Type () -> Void does not conform to protocol 'LogicValue'
有什么建议吗?
答案 0 :(得分:54)
Swift 3/4的更新:
可选不再是布尔表达式,而且
已弃用func dismissModalViewControllerAnimated(animated: Bool)
在Swift中不再可用。
只需将completion参数声明为可选闭包,并且 传递给
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
也采用了可选的闭包:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Old(Swift 1.x?)回答:
将completion
参数声明为(隐式解包)可选闭包(() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
但请注意,您可以致电
self.dismissViewControllerAnimated(true, completion: completion)
在任何情况下,因为该函数的completion
参数也是可选的。
并且
func dismissModalViewControllerAnimated(animated: Bool)
实际上已标记为已弃用。
答案 1 :(得分:16)
刚刚在上面添加了Martin R的答案..
回调可以是可选的,而不是隐式参数(带感叹号),使用可选运算符。
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
答案 2 :(得分:10)
最好在回调声明中添加= nil
,以避免在调用它时传递nil:
func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
你可以这样调用你的函数:dismiss()