我有两个视图(一个表,一个集合)。在每个视图的单元格中,都有一个按钮,当点击该按钮时,该按钮应获取用户的当前位置并将其传递到变量中,以在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提供过多的责任...

10-08 15:34