【问题标题】:arithmetic within string literal in SwiftSwift中字符串文字中的算术
【发布时间】:2014-06-05 04:41:01
【问题描述】:

在玩 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 常量声明为显式浮动。这会是合理的结果吗?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您仍然需要将数字转换为相同的类型,以便它们可以相加,例如:

    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 才能相加。

    【讨论】:

    • Ehhh 我想没有明确声明的浮点数将被视为 Double。这就是为什么我需要在成本上施放 Float
    • @iPatel 因为默认情况下let cost = 82.5 被推断为Double,并且您不能显式添加到FloatDouble + Float 也没有运算符重载,因此该语句是非法的。
    • @mythz -Ohh,, yah,, 谢谢队友让我更清楚:)
    • Int + Double 也不起作用..我希望它能像 python 一样工作
    • @iPatel 的设计,swift 从不自动对变量进行类型转换
    【解决方案2】:

    值永远不会隐式转换为另一种类型。

    let cost = 82.5
    let tip:Float = 18
    let str = "Your total cost will be \(cost + tip)"
    

    在上面的例子中,它认为成本是双倍的,你已经将小费定义为浮点数,所以它给出了错误。

    而是将cost的类型指定为float,如下所示

    let cost:Float = 82.5
    

    希望它能解决你的问题。

    【讨论】:

      【解决方案3】:

      在您的代码cost 中推断为Double 类型。

      在您的第一个(工作)示例中,tip 也被推断为 Double,表达式 cost + tip 是两个 Double 值的加法,产生一个 Double 值。

      在您的第二个(不工作)示例中,tip 被声明为Float,因此表达式cost + tip 是一个错误。 错误消息不是很丰富。但问题是您将 Double 添加到 Float 中,并且在强静态类型语言中,您不会像在 C 或 Objective C 中那样进行自动类型转换。

      您必须选择Float(cost) + tipcost + Double(tip)

      【讨论】:

        猜你喜欢
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多