我有两个视图(一个表,一个集合)。在每个视图的单元格中,都有一个按钮,当点击该按钮时,该按钮应获取用户的当前位置并将其传递到变量中,以在Deeplink中使用。
我可以通过在两个视图中都实现CoreLocation
来实现此目的,但是我尝试遵守DRY并因此编写一个Class或在AppDelegate中实现一次,并在用户按下任一View的Cell中的按钮时调用它。
我见过类似的问题,建议使用Singleton模式,或者使用NSNotificationCenter
并观察按下按钮的时间。
对于这种情况下的最佳实现有什么想法吗?
最佳答案
基本上,您需要这样的东西:
final class UserLocationFinder: NSObject, CLLocationManagerDelegate {
static let instance = UserLocationFinder()
var currentLocation: CLLocation?
// implement the code necessary to get the user's location and
// assign it to currentLocation
}
然后,在需要知道当前位置的代码中,您可以:
if let currentLocation = UserLocationFinder.instance.currentLocation {
// the current location is known
这样您就满足了DRY的要求,因为代码仅在这一类中,并且您满足了单责任原则(SRP),因为您没有为
AppDelegate
提供过多的责任...