swift 4.0无法转换类型'(_) - >的值()'到期望参数类型(() - > Void)?

时间:2017-08-09 07:34:22

标签: ios11 swift4

我使用Xcode 9 beta 5将我的项目迁移到swift 3.0 - 4.0,但收到以下错误消息。 enter image description here

如果有人遇到此问题,请提供帮助。

@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)
    }

1 个答案:

答案 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中编译,你也应该认为这样的代码是一种超级糟糕的做法。

当你需要传递一个没有参数的闭包时,不要放置参数。