Swift中字符串文字中的算术运算

时间:2014-06-05 04:41:01

标签: ios swift

玩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常量以显式浮动或不浮动。这会是合理的结果吗?

3 个答案:

答案 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

因此,他们需要明确转换为DoubleFloat才能加在一起。

答案 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中那样进行自动类型转换。

您必须执行FloatFloat(cost) + tip