Swift:如何在C中按位或者两个枚举常量?

时间:2015-03-20 14:02:27

标签: c swift enums

设置

OS X 10.10.2
Xcode 6.1

问题

这是一个愚蠢的Swift语法问题。在Swift中,你如何按比例或两个东西(我收集它们在Swift中是Int s)在C中枚举整数常量?

具体来说,这是我尝试做的一个例子在C中会是这样的:

CGGradientDrawingOptions opts = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;

当我在Swift中尝试这个时:

let options: CGGradientDrawingOptions = kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation;

我得到了这个编译时错误:

Cannot invoke '|' with an argument list of type '(Int, Int)'

这里的语法错误是什么?我尝试了许多明显的变体,包括许多不同的as强制转换,包含和排除特定的CGGradientDrawingOptions类型的decl,但我找不到这个非常简单的操作的正确语法。

1 个答案:

答案 0 :(得分:7)

kCGGradientDrawsBeforeStartLocationkCGGradientDrawsAfterEndLocationInt,而CGGradientDrawingOptionsUInt32的别名

您必须将Int转换为UInt32

let options: CGGradientDrawingOptions = UInt32(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)

但我认为以下情况更好。

let options = CGGradientDrawingOptions(kCGGradientDrawsBeforeStartLocation|kCGGradientDrawsAfterEndLocation)

ADDED:至于Xcode7 / Swift2.0:

let options: CGGradientDrawingOptions = [.DrawsBeforeStartLocation, .DrawsAfterEndLocation]