我创建了一个新的swift文件和类。我想使用我的所有视图控制器的警报功能。但我有个错误。这是我的类和函数。
class alert {
func makeAlert(titleInput:String, messageInput:String){
let alert = UIAlertController(title: titleInput, message: messageInput, preferredStyle: UIAlertController.Style.alert)
let okButton = UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil)
alert.addAction(okButton)
}
}
我想这样使用我的函数。
alert.makeAlert(titleInput: "Error", messageInput: " name or Location can't be empty")
这里是我的错误信息:
实例成员"makeAlert"不能用于类型"alert";你的意思是用这种类型的值来代替吗?
alert
是一个类型,makeAlert
是一个实例成员。正如错误所说的
实例成员"makeAlert">不能用于类型的"alert">
为了显示选项,让我首先重命名代码的一些术语,以避免混淆
class Alert {
func makeAlert(titleInput: String, messageInput: String) {
let alertController = UIAlertController(title: titleInput, message: messageInput, preferredStyle: UIAlertController.Style.alert)
let okButton = UIAlertAction(title: "Ok", style: .default, handler: nil)
alertController.addAction(okButton)
}
}
创建Alert
的实例
let alert = Alert()
alert.makeAlert(titleInput: "Foo", messageInput: "Bar")
或者使makeAlert
成为static
功能
static func makeAlert(titleInput:String, messageInput:String) { ...
然后您可以在类型上使用"makeAlert">
Alert.makeAlert(titleInput: "Foo", messageInput: "Bar")
欲了解更多信息,请阅读语言指南中的方法
但是一个额外的Alert
类不是很有用,而且函数没有返回值。更好的解决方案是扩展UIViewController
,因为您可以在当前视图控制器中显示警报控制器
extension UIViewController {
func presentAlert(title: String, message: String, completion: (() -> Void)? = nil) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okButton = UIAlertAction(title: "Ok", style: .default, handler: nil)
alertController.addAction(okButton)
self.present(alertController, animated: true, completion: completion)
}
}