【问题标题】:How to do arithmetic between int and float in Swift?如何在 Swift 中进行 int 和 float 之间的算术运算?
【发布时间】:2014-08-09 15:07:36
【问题描述】:

这是我在 Swift 编程中的第一天,直到现在我们都在使用 Objective C。我尝试编写简单的加法程序,它可以工作。喜欢,

var i = 10
var j = 10
var k = i + j
println(k)

但是当我将其中一个值更改为浮动时,它会出错。

var i = 10
var j = 10.4
var k = i + j
println(k)

错误:main.swift:13:11:找不到 '+' 的重载 接受提供的参数

现在我做了谷歌搜索并尝试了一些东西,例如Double(i+j) ,但它不起作用。在这种情况下,Swift 应该隐式地将 int 转换为 float,不是吗?

如果我在理解 Swift 语言方面有任何错误,请提出建议。

【问题讨论】:

    标签: compiler-errors swift xcode6


    【解决方案1】:

    根据您想要的结果,您应该使用该类型的 init 方法将其转换为适当的类型。

    例如。

    var myInt = 5;
    var myDouble = 3.4;
    

    如果我想要一个双精度,例如我的结果

    var doubleResult = Double(myInt) + myDouble;
    

    如果我想要一个整数,请注意双精度将被截断。

    var intResult = myInt + Int(myDouble)
    

    我在您的示例中看到的问题是您尝试执行添加操作,然后对其进行转换,但在执行添加之前,两个值必须相同。

    Apple 已经非常严格地避免类型不匹配和转换错误。有时这对于来自其他语言的开发人员来说可能有点“过于严格”,一开始我很生气,但我已经习惯了。

    【讨论】:

    • 只是一个注释; Float(int) 对我不起作用。 Double(int) 就是答案。
    • swift 太有限了。示例:2 * 3.14 => 3.14 + 3.14 我希望将来这项工作无需转换
    【解决方案2】:

    您可以定义自己的运算符...

    // Put this at file level anywhere in your project
    operator infix + { }
    @infix func + (a: Int, b: Double) -> Double {
        return Double(a) + b
    }
    @infix func + (a: Double, b: Int) -> Double {
        return Double(b) + a
    }
    
    let i = 10
    let j = 10.4
    let k = i + j // 20.4
    

    ...但我觉得这违背了语言的精神(正如@TheLazyChap 所说,这取决于您想要什么,可能并不总是相同)。

    【讨论】:

    • 不错的hacky!这令人印象深刻,但破坏了 Swift 的严格类型
    • 我在原帖里确实这么说的!
    • 你怎么知道我不需要整数版本的加号运算符覆盖。 :)
    【解决方案3】:

    试试这个:

     var i = 10  //Int Type
     var j = 10.4  //Double Type
     var k = Double(i) + j //result is now Double Type
     println(k)
    

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 2023-03-14
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多