Swift:如何对两个在 C 中是枚举常量的东西进行按位或运算?
Swift: How to bitwise OR two things that were enum constants in C?
设置
OS X 10.10.2
Xcode6.1
问题
这是一个愚蠢的 Swift 语法问题。在 Swift 中,你如何对两个在 C 中是枚举整数常量的东西(我收集它们是 Swift 中的 Int
进行按位或操作?
具体来说,这是我尝试做的事情在 C:
中的示例
CGGradientDrawingOptions opts = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;
当我在 Swift 中尝试此操作时:
let options: CGGradientDrawingOptions = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;
我得到这个编译时错误:
Cannot invoke '|' with an argument list of type '(Int, Int)'
我的语法错误是什么?我尝试了许多明显的变体,包括许多不同的 as
强制转换、包含和排除特定 CGGradientDrawingOptions
类型声明,但我找不到这个非常简单的操作的正确语法。
kCGGradientDrawsBeforeStartLocation
和 kCGGradientDrawsAfterEndLocation
是 Int
,而 CGGradientDrawingOptions
是 UInt32
的别名
您必须将 Int
转换为 UInt32
:
let options: CGGradientDrawingOptions = UInt32(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)
不过我觉得下面的更好
let options = CGGradientDrawingOptions(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)
添加:至于Xcode7/Swift2.0:
let options: CGGradientDrawingOptions = [.DrawsBeforeStartLocation, .DrawsAfterEndLocation]
设置
OS X 10.10.2
Xcode6.1
问题
这是一个愚蠢的 Swift 语法问题。在 Swift 中,你如何对两个在 C 中是枚举整数常量的东西(我收集它们是 Swift 中的 Int
进行按位或操作?
具体来说,这是我尝试做的事情在 C:
中的示例CGGradientDrawingOptions opts = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;
当我在 Swift 中尝试此操作时:
let options: CGGradientDrawingOptions = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;
我得到这个编译时错误:
Cannot invoke '|' with an argument list of type '(Int, Int)'
我的语法错误是什么?我尝试了许多明显的变体,包括许多不同的 as
强制转换、包含和排除特定 CGGradientDrawingOptions
类型声明,但我找不到这个非常简单的操作的正确语法。
kCGGradientDrawsBeforeStartLocation
和 kCGGradientDrawsAfterEndLocation
是 Int
,而 CGGradientDrawingOptions
是 UInt32
您必须将 Int
转换为 UInt32
:
let options: CGGradientDrawingOptions = UInt32(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)
不过我觉得下面的更好
let options = CGGradientDrawingOptions(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)
添加:至于Xcode7/Swift2.0:
let options: CGGradientDrawingOptions = [.DrawsBeforeStartLocation, .DrawsAfterEndLocation]