无法转换“(_) -> () 类型的值?”预期的参数类型 '@convention(block) () -> Void'
Cannot convert value of type '(_) -> ()?' to expected argument type '@convention(block) () -> Void'
这段代码 运行 在 Swift 3 中没问题,但现在将代码由 Xcode 转换为 Swift 4 后,它会抛出错误。我将根据我从网络服务获得的值在主队列中呈现下一个场景。
DispatchQueue.main.async {
[weak self] value in
self?.router?.invokeTheSegueAfterTheWebService(navigationKey: arrayElementsGot["questionType"] as! String, givenViewController: self!)
}
在 Swift 3 中,value
参数被推断为 ()
.
类型
Swift 4 不再允许您向根据上下文应采用不同数量参数的块提供单个参数。所以你的代码应该看起来像
DispatchQueue.main.async {
[weak self] in
self?.router?.invokeTheSegueAfterTheWebService(navigationKey: arrayElementsGot["questionType"] as! String, givenViewController: self!)
}
如果你查看你得到的错误,它说它期望 () -> Void
(例如一个没有参数的块)但你传递了它 (_) -> ()
(例如一个参数未知的块类型)。
这段代码 运行 在 Swift 3 中没问题,但现在将代码由 Xcode 转换为 Swift 4 后,它会抛出错误。我将根据我从网络服务获得的值在主队列中呈现下一个场景。
DispatchQueue.main.async {
[weak self] value in
self?.router?.invokeTheSegueAfterTheWebService(navigationKey: arrayElementsGot["questionType"] as! String, givenViewController: self!)
}
在 Swift 3 中,value
参数被推断为 ()
.
Swift 4 不再允许您向根据上下文应采用不同数量参数的块提供单个参数。所以你的代码应该看起来像
DispatchQueue.main.async {
[weak self] in
self?.router?.invokeTheSegueAfterTheWebService(navigationKey: arrayElementsGot["questionType"] as! String, givenViewController: self!)
}
如果你查看你得到的错误,它说它期望 () -> Void
(例如一个没有参数的块)但你传递了它 (_) -> ()
(例如一个参数未知的块类型)。