Why in Swift is this legal...
assert( false, "Unexpected diagnosis: \(diagnosis)" );
whereas this is not?
let assertString = "Unexpected diagnosis: \(diagnosis)"
assert( false, assertString );
In the second snippet, I get the error...
Cannot invoke 'assert' with an argument list of type '(BooleanLiteralConvertible, String)
Surely, the second parameter is a string in both cases.
Second paramter of assert is declared as either message: @autoclosure () -> Str or _ message: StaticString. I guess "Unexpected diagnosis: \(diagnosis)" is treated as expression and picked up by @autoclosure, while assertString is simply a String variable that cannot be converted to closure or StaticString.
StaticString can be made only with:
static func convertFromExtendedGraphemeClusterLiteral(value: StaticString) -> StaticString
static func convertFromStringLiteral(value: StaticString) -> StaticString
I guess this explains why swift manual has note that you cannot use string interpolation in assert() as there is no support for StringInterpolationConvertible.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With