玩Swift,我发现了一些尴尬的错误。
let cost = 82.5
let tip = 18.0
let str = "Your total cost will be \(cost + tip)"
这正如我所料,但
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(cost + tip)"
不适用于错误
could not find member 'convertFromStringInterpolationSegment'
let str = "Your total cost will be \(cost + tip)"
两个示例之间的区别在于声明tip常量以显式浮动或不浮动。这会是合理的结果吗?
答案 0 :(得分:4)
您仍然需要将数字转换为相同类型,以便将它们添加到一起,例如:
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(Float(cost) + tip)"
默认情况下,实数文字推断为Double
,即:
let cost:Double = 82.5
因此,他们需要明确转换为Double
或Float
才能加在一起。
答案 1 :(得分:1)
永远不会将值隐式转换为其他类型。
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(cost + tip)"
在上面的例子中,它将成本视为双倍和你已经将tip定义为float,因此它给出了错误。
而是将成本类型指定为浮动,如下所示
let cost:Float = 82.5
希望它能解决你的问题。
答案 2 :(得分:0)
在您的代码cost
中推断为Double
类型。
在您的第一个(工作)示例中,tip
也被推断为Double
,而表达式cost + tip
是两个Double
值的相加,从而产生{{ 1}}值。
在您的第二个(不工作)示例中,Double
被声明为tip
,因此表达式Float
是错误的。
错误消息不是很有用。但问题是,您要向cost + tip
添加Double
,并且使用强静态类型语言,您将无法像在C或Objective C中那样进行自动类型转换。
您必须执行Float
或Float(cost) + tip