我正在尝试记录一个枚举:
enum CKAccountStatus : Int {
case CouldNotDetermine
case Available
case Restricted
case NoAccount
}
NSLog("%i", CKAccountStatus.Available)
编译器提示:
Type 'CKAccountStatus' does not conform to protocol 'CVarArg'
为什么?我试图投值:
NSLog("%i", CKAccountStatus.Available as Int)
但这也不会飞:
Cannot convert the expression's type '()' to type 'String'
最佳答案
获取枚举的基础 Int
值:CKAccountStatus.Available.rawValue
。
枚举在 Swift 中不是严格意义上的整数,但如果它们是用底层类型声明的,您可以使用 rawValue
获取它——无论底层类型是什么。 (enum Foo: String
将为您提供 rawValue
等的字符串)如果枚举没有基础类型,则 rawValue
有没有什么可以给你的。在从 ObjC 导入的 API 中,使用 NS_ENUM
定义的任何枚举都有一个基础整数类型(通常是 Int
)。
如果您想更详细地打印任何枚举,您可以考虑对采用 Printable
协议(protocol)的枚举类型进行扩展。
关于swift - 使用 NSLog 记录 Swift 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061735/