这可能只是一个愚蠢的错误,但我的枚举有一个问题,我完全陷入了困境。
我有以下代码:

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,但据我所知,没有简单的方法可以获得值的符号表示。

07-27 22:25