将Objective-C枚举转换为Swift String

时间:2016-02-10 14:43:06

标签: ios swift enums swift2

我正在尝试将iOS错误代码转换为Swift 2中的String(XCode 7.2)。但转换为String会返回类型名称,而不是系统枚举的值名称

这就是我正在尝试的:

import CoreLocation
import EventKit

let clError = CLError.LocationUnknown
let clErrorString = "\(clError)"
// EXPECTED: 'LocationUnknown'. OBTAINED: 'CLError'

let ekError = EKErrorCode.CalendarIsImmutable
let ekErrorString = "\(ekError)"
// EXPECTED: 'CalendarIsImmutable'. OBTAINED: 'EKErrorCode'

但是在Swift中声明了枚举,这可以按预期工作:

enum _EKErrorCode : Int {
    case CalendarIsImmutable
}

let _ekError = _EKErrorCode.CalendarIsImmutable
let _ekErrorString = "\(_ekError)"
// EXPECTED: 'CalendarIsImmutable'. OBTAINED: 'CalendarIsImmutable'

我正在尝试避免使用所有可能的枚举值的Switch-Case,或者扩展添加自定义描述的系统类型。

1 个答案:

答案 0 :(得分:0)

这可以通过以下方式实现,而无需使用ClError.Code扩展名手动检查情况

extension CLError.Code {
    func getErrorDescription() -> String {
        return String(describing: self)
    }
}

用法:

let clError = CLError.locationUnknown
print (clError.getErrorDescription())