如何在Swift中使用结构处理按位操作?
在Obj-C中,我喜欢做以下事情:如何在Swift中使用结构处理按位操作?,swift,Swift,在Obj-C中,我喜欢做以下事情: [MyUILib makePathForRectWithEdges:UIRectEdgeLeft|UIRectEdgeRight] 其中的参数是NSInteger,稍后我将其与UIRectEdge枚举值进行比较,以查看要在路径中包括哪些边: if(edges & UIRectEdgeTop) { // Draw Stuff } 在Swift中,苹果将UIDirectEdge定义为: struct UIRectEdge : OptionSetT
[MyUILib makePathForRectWithEdges:UIRectEdgeLeft|UIRectEdgeRight]
其中的参数是NSInteger,稍后我将其与UIRectEdge枚举值进行比较,以查看要在路径中包括哪些边:
if(edges & UIRectEdgeTop)
{
// Draw Stuff
}
在Swift中,苹果将UIDirectEdge定义为:
struct UIRectEdge : OptionSetType {
init(rawValue rawValue: UInt)
static var None: UIRectEdge { get }
static var Top: UIRectEdge { get }
static var Left: UIRectEdge { get }
static var Bottom: UIRectEdge { get }
static var Right: UIRectEdge { get }
static var All: UIRectEdge { get }
}
我仍然可以使用
uirectredge.Top.rawValue
来获取UInt,但是调用类似于:makePathForRectWithEdge(uirectredge.Left.rawValue | uirectredge.Right.rawValue)这样的函数与我以前的做法相比,既难看又难读。是否有更好的模式用于使用标志,或者这正是Swift中必须采用的方式?您向函数发送一个集合,而不是对原始值进行排序或重新排序:
MyUILib.makePathForRectWithEdges([.Left, .Right])
因此名称为选项setype
。当需要检查集合中是否包含选项时:
if edges.contains(.Top) { ... }