这可能只是一个愚蠢的错误,但我的枚举有一个问题,我完全陷入了困境。
我有以下代码:
func locationManager(_ manager: CLLocationManager,
didChangeAuthorization status: CLAuthorizationStatus) {
if (status == .authorizedWhenInUse) {
print("-- authorized when in use")
locationManager.startUpdatingLocation()
} else {
print("--- \(String(reflecting: status))")
}
print("--- didChangeAuthorizationStatus = \(status)")
}
但其中的调试打印语句会打印以下内容:
--- __C.CLAuthorizationStatus
--- didChangeAuthorizationStatus = CLAuthorizationStatus
为什么参数
status
(在我看来应该是属于枚举CLAuthorizationStatus
(比如.accepted
)的情况)会打印CLAuthorizationStatus
?这对我来说毫无意义,我怀疑一些初学者的错误,但我找不到。。。在我看来,此代码的行为应该类似于以下代码:
enum TestEnum {
case a
case b
}
var c = TestEnum.a
func test(name e: TestEnum) {
if e == .a {
print("case a")
} else {
print("other case")
}
print(String(reflecting: e))
}
test(name: c)
像预期的那样
case a
__lldb_expr_16.TestEnum.a
最佳答案
这不是你的错,而是当前对导入枚举的Swift限制。
您可能需要使用rawValues:
print(status.rawValue)
例如,
3
means CLAuthorizationStatus.authorizedAlways
,但据我所知,没有简单的方法可以获得值的符号表示。