位置权限确定器

Location permission determiner

我正在尝试构建一个权限确定器 class,它基本上可以确定权限。

到目前为止,我已经完成了下面的代码,但是我在 case 语句 case LocationUsage.WhenInUse:case .Always: 中不断遇到错误。

它说

enum case is not a member fo type PrivateResoure.LocationUsage?

这个小struct我做错了什么?

public struct PrivateResource {


  public enum LocationUsage {
      case WhenInUse
      case Always
  }
  var usage: LocationUsage?



  public var isNotDeterminedAuthorization: Bool {

      return CLLocationManager.authorizationStatus() == .NotDetermined

  }

  public var isAuthorized: Bool {

          switch usage {
          case LocationUsage.WhenInUse:
              return CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse
          case .Always:
              return CLLocationManager.authorizationStatus() == .AuthorizedAlways
          }

  }
}

我看到两个问题:

  • usage 是可选的,所以你必须打开它。

  • .AuthorizedWhenInUse.AuthorizedAlways 不是 CLAuthorizationStatus 选择的一部分。

选项是:

Authorized, Denied, NotDetermined, Restricted

快速修复:

public var isAuthorized: Bool {

    switch usage! {
    case LocationUsage.WhenInUse:
        return CLLocationManager.authorizationStatus() == .Authorized
    case .Always:
        return CLLocationManager.authorizationStatus() == .Authorized
    }

}

两个注意事项:它解决了问题,但我的示例解决方案改变了您的逻辑 - 您可能需要适应。此外,我已强制展开此示例的 Optional:我将让您选择适合您的代码的最安全的方式。