> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users