位置权限确定器
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:我将让您选择适合您的代码的最安全的方式。
我正在尝试构建一个权限确定器 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:我将让您选择适合您的代码的最安全的方式。