Kos*_*ika 46 functional-programming function callback swift
我正在学习Swift语言,但是我无法将可选的回调参数传递给函数:
func dismiss(completion: () -> Void) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Run Code Online (Sandbox Code Playgroud)
这显示了一个错误 - Type () -> Void does not conform to protocol 'LogicValue'
有什么建议?
Mar*_*n R 57
Swift 3/4更新:
可选不再是布尔表达式,并且func dismissModalViewControllerAnimated(animated: Bool)
在Swift中不再使用已弃用的表达式.
只需将completion参数声明为可选闭包,并将其传递给
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
Run Code Online (Sandbox Code Playgroud)
它还带有一个可选的闭包:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Run Code Online (Sandbox Code Playgroud)
老(斯威夫特1.x?)回答:
将completion
参数声明为(隐式解包)可选闭包(() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Run Code Online (Sandbox Code Playgroud)
但请注意,你可以打电话
self.dismissViewControllerAnimated(true, completion: completion)
Run Code Online (Sandbox Code Playgroud)
在任何情况下,因为该completion
函数的参数也是可选的.和
func dismissModalViewControllerAnimated(animated: Bool)
Run Code Online (Sandbox Code Playgroud)
实际上标记为已弃用.
cod*_*nja 16
刚刚加入Martin R的答案......
回调可以是可选的,而不是隐式参数(带感叹号),使用可选运算符.
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
Run Code Online (Sandbox Code Playgroud)
Rém*_*rin 11
最好= nil
在回调声明中添加,以避免在调用它时传递nil:
func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
Run Code Online (Sandbox Code Playgroud)
你可以像这样调用你的函数: dismiss()