Swift自定义validation函数创建的UIAlertController无法弹出如何解决
报错原因
alert是你在validation函数内部定义的局部变量,作用域仅存在于函数内部,主页面的代码无法跨作用域访问该变量,因此调用self.present(alert, animated: true, completion: nil)时会触发变量未定义的报错。
解决方案
你要求无需在主页面声明alert变量,优先推荐以下实现方案:
方案1:将弹窗展示逻辑封装到函数内部(最贴合需求)
直接在validation函数内完成弹窗的弹出操作,只需传入当前页面的控制器实例即可,主页面调用时无需接触alert变量:
改造后的validation函数
func validation(title: String, message: String, uiAlertActionTitle: String, in vc: UIViewController) { let alert = UIAlertController(title: title, message: message, preferredStyle: .actionSheet) alert.addAction(UIAlertAction(title: uiAlertActionTitle, style: .default, handler: nil)) vc.present(alert, animated: true, completion: nil) }
主页面调用代码
// 仅需一行调用,无需声明alert变量 validation(title: "Error", message: "Mail or Password is Wrong", uiAlertActionTitle: "OK", in: self)
方案2:函数返回alert实例
如果需要在主页面对alert做额外定制,可以让validation函数返回创建好的alert实例:
改造后的validation函数
func validation(title: String, message: String, uiAlertActionTitle: String) -> UIAlertController { let alert = UIAlertController(title: title, message: message, preferredStyle: .actionSheet) alert.addAction(UIAlertAction(title: uiAlertActionTitle, style: .default, handler: nil)) return alert }
主页面调用代码
let alert = validation(title: "Error", message: "Mail or Password is Wrong", uiAlertActionTitle: "OK") self.present(alert, animated: true, completion: nil)
内容的提问来源于stack exchange,提问作者user17166588
相关产品推荐
相关产品推荐

