我试图调用func来发出警报,但是它在另一个静态函数内部虽然它没有工作
在我的获取用户func中当实际经度返回nil我想调用alert func虽然它不能正常工作,因为我认为它会
它表示错误:呼叫中的额外参数"消息
func alertTheUser(title: String , message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default, handler: nil);
alert.addAction(ok);
present(alert, animated: true, completion: nil);
}
static func firestorefetchUserWithUID(uid: String, completion:@escaping (User2) -> ()) {
//code taken out for this example
//fetch user from database
//dictionary = snapshot etc
guard let latitude = dictionary["Actual Latitude"] as? String else {
alertTheUser(title:"title" , message:"message")
return
}
//code taken out for this example
}
答案 0 :(得分:3)
静态函数不能直接调用非静态函数。非静态函数是实例方法,在静态函数中有无实例 - 它是静态的,这意味着它属于类型,而不是类型的实例。
因此,静态firestorefetchUserWithUID
无法调用alertTheUser
,因为alertTheUser
是一个实例方法,并且您没有实例发送它。如果alertTheUser
是静态的,那么您又会遇到同样的问题,因为它因同样的原因无法调用present
,因为present
是实例方法。
在我看来,让静态函数静态只是一个错误的开始;使它成为一个实例方法,如果你知道你将总是有一个实例发送它。 (我假设你做有一个实例,因为你使用present
表明这段代码必须在UIViewController子类中。)