【发布时间】:2016-02-10 14:43:06
【问题描述】:
我正在尝试将 iOS 错误代码转换为 Swift 2 (XCode 7.2) 中的字符串。但是转换为 String 会返回 type name 而不是 value name 用于系统枚举。
这就是我正在尝试的:
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,或者通过添加自定义描述来扩展系统类型。
【问题讨论】:
-
CLError 是否有任何显示错误信息的属性?
-
只有可见的方法是
rawValue和hashValue。两者都返回一个整数值。 -
显然你需要扩展系统类型或使用开关盒,你为什么要避免这些?
-
创建一个
switch并为每个枚举值分配一个String。这是你唯一的选择。 -
@matt 我试图避免枚举所有值,因为它不是面向未来的。添加到新 iOS 版本的任何新的可能错误都会破坏代码。