Ios 将Objective-C枚举转换为Swift字符串
我正在尝试将iOS错误代码转换为Swift 2中的字符串(XCode 7.2)。但是转换为字符串会返回系统枚举的类型名称,而不是值名称 这就是我正在尝试的:Ios 将Objective-C枚举转换为Swift字符串,ios,swift,enums,swift2,Ios,Swift,Enums,Swift2,我正在尝试将iOS错误代码转换为Swift 2中的字符串(XCode 7.2)。但是转换为字符串会返回系统枚举的类型名称,而不是值名称 这就是我正在尝试的: import CoreLocation import EventKit let clError = CLError.LocationUnknown let clErrorString = "\(clError)" // EXPECTED: 'LocationUnknown'. OBTAINED: 'CLError' let ekErro
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,这与预期一样有效:
enum _EKErrorCode : Int {
case CalendarIsImmutable
}
let _ekError = _EKErrorCode.CalendarIsImmutable
let _ekErrorString = "\(_ekError)"
// EXPECTED: 'CalendarIsImmutable'. OBTAINED: 'CalendarIsImmutable'
我试图避免使用所有可能的枚举值的切换案例,或者扩展系统类型添加自定义描述。这可以通过以下方式实现,而无需使用
cleror.code
扩展手动检查案例
extension CLError.Code {
func getErrorDescription() -> String {
return String(describing: self)
}
}
用法:
let clError = CLError.locationUnknown
print (clError.getErrorDescription())
这可以通过以下方式实现,而无需使用
cleror.code
扩展手动检查案例
extension CLError.Code {
func getErrorDescription() -> String {
return String(describing: self)
}
}
用法:
let clError = CLError.locationUnknown
print (clError.getErrorDescription())
CLError是否有任何显示错误消息的属性?只有可见的方法是
rawValue
和hashValue
。两者都返回一个整数值。显然,您需要扩展系统类型或使用开关大小写,为什么要避免这些?创建一个开关
,并为每个枚举值分配一个字符串
。这是你唯一的选择。@matt我试图避免枚举所有值,因为这不是未来的证明。添加到新iOS版本的任何新的可能错误都会破坏代码。Cleror是否具有显示错误消息的任何属性?只有可见的方法是rawValue
和hashValue
。两者都返回一个整数值。显然,您需要扩展系统类型或使用开关大小写,为什么要避免这些?创建一个开关
,并为每个枚举值分配一个字符串
。这是你唯一的选择。@matt我试图避免枚举所有值,因为这不是未来的证明。在新的iOS版本中添加任何新的可能错误都会破坏代码。嗯,最近在Swift 4.2和Xcode 10.1上尝试过,在我看来,这种方法不再有效。不得不求助于switchuhm:最近在Swift 4.2和Xcode 10.1上尝试过,在我看来,这种方法已经不起作用了。不得不求助于转换