I'll try profiling it (or looking at the generated assembly). Thanks!
> On Nov 20, 2016, at 21:15 , Marco S Hyman <m...@snafu.org> wrote: > >> 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. > > -- Rick Mann rm...@latencyzero.com _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users