我有一个枚举:

enum GestureDirection:UInt {
    case Up =       1 << 0
    case Down =     1 << 1
    case Left =     1 << 2
    case Right =    1 << 3
}

但每次我都会出错:

枚举大小写的原始值必须是文字

我不明白.

Swift 1.2,Xcode 6.3.2

推荐答案

那是因为1 << 0不是字面意思.您可以使用二进制文本,它是一个文本,并且在那里是允许的:

enum GestureDirection:UInt {
    case Up =       0b000
    case Down =     0b001
    case Left =     0b010
    case Right =    0b100
}

枚举仅支持raw-value-literals,每language grammar个枚举中有numeric-literal(数字)string-literal­(字符串)或boolean-literal­(布尔).

而是作为一种解决方法,仍然能很好地表明你在做什么.

Swift相关问答推荐

为什么不能使用actor作为AsyncSequence中的状态机类型?

如何使用RxSwift根据数据数绘制UICollectionView单元格

如何将EnvironmentObject从UIKit视图控制器传递到SwiftUI视图

按Esc键时执行操作(工作表)

NSWindow中以编程方式创建的TextField快捷方式与SwiftUI

为什么枚举上的.allCases.forEach不是循环(继续和中断不起作用)?

无法创建MKAssociateRegion对象

在不传递参数的情况下使用Init方法?

macOS SwiftUI: 如何触发删除一个项目?

类型擦除`AsyncMapSequence, Element>`

数组中某些元素的总和

ForEach within List:模式的好处?

快速更改tableView中的数据

将基于MyProtocol的泛型函数的参数更改为使用存在的any MyProtocol或some MyProtocol是否会受到惩罚?

如何使用 Swinject 注册符合 ObservableObject 的协议?

关联满足约束时的快速协议方法

如何在 Swift 中将对象归零

在 Swift 中将计时器标签格式化为小时:分钟:秒

如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中

'类 'className' 的 NSManagedObject 必须具有有效的 NSEntityDescription.错误