> Is there a way that avoids branching? Don’t know. Have you profiled
let r = a > b ? 1 : 0 to know it is an issue? > > So, according to Xcode, "true" and "a > b" both have type "Bool". I don't > know why the compiler allows one and not the other, except that it's literal, > and I guess there's a "BoolLiteralConvertible" (or equivalent) for the types. You are including foundation which gets you the bridging code. let r = Int(true) is an error without foundation. With foundation you get this: extension NSNumber : ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral, ExpressibleByBooleanLiteral { // [snip] /// Create an instance initialized to `value`. required public convenience init(booleanLiteral value: Bool) } and this extension Int { public init(_ number: NSNumber) } which when combined make `let r = Int(true)` work. I haven’t profiled the code but would suspect that `let r = a > b ? 1 : 0` might be more efficient. _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users