使用单例模式在 Swift 中完成调用方法的语法
Syntax for Calling Method with Completion in Swift using Singleton Pattern
我正在尝试通过共享实例调用一个方法,该方法的闭包位于单独的 class 中。当使用共享实例从另一个 class 调用时,用于从同一 class 调用函数的语法不起作用。
这是实用程序中的方法 class:
func findNearbyLocations(completion: @escaping (MKMapItem?, Error?) -> ()) {
//get location
}
这适用于从 class:
中调用它
self.findNearbyLocations(query:val1!) {
placemark, error in
guard let placemark = placemark, error == nil else {
return
}
}
当我尝试从另一个 class 调用它时,使用以下命令,编译器给出错误:
Extra argument 'query' in call
Utilities.shared.findNearbyLocations(query:val1!) {
placemark, error in
guard let placemark = placemark, error == nil else {
return
}
}
我可以毫无问题地使用共享实例调用其他方法。这是什么原因造成的?
你当前的函数应该这样调用
Utilities.shared.findNearbyLocations { (placemark, error) in
guard let placemark = placemark, error == nil else {
return
}
}
如果需要发送参数,则将函数改为
func findNearbyLocations(query:QueryType,completion: @escaping (MKMapItem?, Error?) -> ()) { --- }
那你就可以
Utilities.shared.findNearbyLocations(query:Your_Value) { (placemark, error) in
guard let placemark = placemark, error == nil else {
return
}
}
我正在尝试通过共享实例调用一个方法,该方法的闭包位于单独的 class 中。当使用共享实例从另一个 class 调用时,用于从同一 class 调用函数的语法不起作用。
这是实用程序中的方法 class:
func findNearbyLocations(completion: @escaping (MKMapItem?, Error?) -> ()) {
//get location
}
这适用于从 class:
中调用它self.findNearbyLocations(query:val1!) {
placemark, error in
guard let placemark = placemark, error == nil else {
return
}
}
当我尝试从另一个 class 调用它时,使用以下命令,编译器给出错误:
Extra argument 'query' in call
Utilities.shared.findNearbyLocations(query:val1!) {
placemark, error in
guard let placemark = placemark, error == nil else {
return
}
}
我可以毫无问题地使用共享实例调用其他方法。这是什么原因造成的?
你当前的函数应该这样调用
Utilities.shared.findNearbyLocations { (placemark, error) in
guard let placemark = placemark, error == nil else {
return
}
}
如果需要发送参数,则将函数改为
func findNearbyLocations(query:QueryType,completion: @escaping (MKMapItem?, Error?) -> ()) { --- }
那你就可以
Utilities.shared.findNearbyLocations(query:Your_Value) { (placemark, error) in
guard let placemark = placemark, error == nil else {
return
}
}