Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将Objective-C枚举转换为Swift字符串_Ios_Swift_Enums_Swift2 - Fatal编程技术网

Ios 将Objective-C枚举转换为Swift字符串

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

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

这就是我正在尝试的:

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上尝试过,在我看来,这种方法已经不起作用了。不得不求助于转换