swift从静态函数内部调用func?

时间:2018-03-24 23:49:30

标签: swift

我试图调用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
}

1 个答案:

答案 0 :(得分:3)

静态函数不能直接调用非静态函数。非静态函数是实例方法,在静态函数中有无实例 - 它是静态的,这意味着它属于类型,而不是类型的实例

因此,静态firestorefetchUserWithUID无法调用alertTheUser,因为alertTheUser是一个实例方法,并且您没有实例发送它。如果alertTheUser 是静态的,那么您又会遇到同样的问题,因为它因同样的原因无法调用present,因为present是实例方法。

在我看来,让静态函数静态只是一个错误的开始;使它成为一个实例方法,如果你知道你将总是有一个实例发送它。 (我假设你有一个实例,因为你使用present表明这段代码必须在UIViewController子类中。)