Swift中UIAlertAction闭包报「上下文期望1个参数无法隐式忽略」如何修复
报错原因
Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
这个报错是因为UIAlertAction初始化时传入的handler闭包必须接收1个UIAlertAction类型的入参,你当前的代码既没有声明这个入参,也没有显式标识要忽略该入参,触发了Swift的类型校验规则。
修复方案
有两种可选方案,根据你的业务需求选择即可:
方案1:忽略无用入参(最常用)
如果你的闭包逻辑里不需要用到当前这个UIAlertAction实例,直接在闭包起始位置添加_ in声明忽略入参即可:
@IBAction func promptForLocation(_ sender: Any) { // 注:你需要提前创建好alert这个UIAlertController实例,否则后续调用alert.textFields会报错 let alert = UIAlertController(title: "输入位置", message: nil, preferredStyle: .alert) alert.addTextField() let submitAction = UIAlertAction( title: "Submit", style: .default ) { _ in // 这里添加_ in即可修复报错 guard let newLocation = alert.textFields?.first?.text else { return } // 后续业务逻辑 } alert.addAction(submitAction) present(alert, animated: true) }
方案2:显式声明入参
如果后续你需要用到这个action实例(比如修改状态、读取属性等),可以显式声明入参:
let submitAction = UIAlertAction( title: "Submit", style: .default ) { action in // 显式声明入参 guard let newLocation = alert.textFields?.first?.text else { return } // 可以在这里使用action变量,比如print(action.title) }
内容的提问来源于stack exchange,提问作者윤대성
相关产品推荐
相关产品推荐

