为什么在Swift中这是合法的...
assert( false, "Unexpected diagnosis: \(diagnosis)" );
而这不是吗?
let assertString = "Unexpected diagnosis: \(diagnosis)"
assert( false, assertString );
在第二个片段中,我得到了错误...
当然,在两种情况下,第二个参数都是字符串。
最佳答案
assert的第二个参数声明为message: @autoclosure () -> Str
或_ message: StaticString
。我猜"Unexpected diagnosis: \(diagnosis)"
被视为表达式并由@autoclosure
接受,而assertString
只是一个String
变量,无法转换为闭包或StaticString
。StaticString
只能通过以下方式制作:
static func convertFromExtendedGraphemeClusterLiteral(value: StaticString) -> StaticString
static func convertFromStringLiteral(value: StaticString) -> StaticString
我猜这解释了为什么swift手册会指出您不能在
assert()
中使用字符串插值,因为不支持StringInterpolationConvertible
。