我使用Xcode 9 beta 5将我的项目迁移到swift 3.0 - 4.0,但收到以下错误消息。
如果有人遇到此问题,请提供帮助。
@IBAction func refreshToLoadData() {
if !isDataPulled {
if !DemoModeManager.shared.isReachable {
self.showNetworkErrorWithCallback(screen: "Load Bags Info".localize(), okHandler: { (inner2) in do
{
self.okClick()
}})
} else {
self.getDataForBags()
}
} else {
self.endRefreshing()
self.bagsTableView.reloadData()
}
}
func showNetworkErrorWithCallback(screen: String, okHandler: (() -> Void)?) {
let okAction = AlertAction("OK".localize(), { (okAction) in
okHandler?()
})
showAlert(networkErrorTitle, message: networkErrorMessageFormat, preferredStyle: UIAlertControllerStyle.alert, animated: false, alertCompletion:nil, cancelAction: nil, otherActions: okAction)
}
答案 0 :(得分:3)
正如我在评论中提到的那样,你传递的闭包只有一个参数,没有参数。
只需删除无用的参数:
@IBAction func refreshToLoadData() {
if !isDataPulled {
if !DemoModeManager.shared.isReachable {
self.showNetworkErrorWithCallback(screen: "Load Bags Info".localize(), okHandler: {
/* ### Do not put any arguments here" ### */
do {
self.okClick()
}
})
} else {
self.getDataForBags()
}
} else {
self.endRefreshing()
self.bagsTableView.reloadData()
}
}
在较旧的Swift中,Swift接受了一个带有单个参数的闭包,其类型为Void
,作为无参数闭包传递。但是从Swift 4中删除了这种行为。即使它在Swift 3中编译,你也应该认为这样的代码是一种超级糟糕的做法。
当你需要传递一个没有参数的闭包时,不要放置参数。