Typecast Obligation是Apple Swift

时间:2014-10-09 15:42:08

标签: ios swift swift-playground

在添加具有不同类型的数字时,我是否遗漏了某些内容或强制转换是必须的:

var i:Int=5
var d:Double=6.0

var q:Double= i + d // this is error?!
var w:Double= Double(i) + d // this is ok

3 个答案:

答案 0 :(得分:1)

  

在添加具有不同类型的数字时,我是否遗漏了某些内容或强制转换是必须的:

不,你不会错过任何东西,强制转换是强制性的。

我认为它对算术运算很好,因为它会让你考虑你的类型转换,但同样的规则适用于位移。即。

var i: UInt64 = 6
var j: Int = 3
var k = i << j // error

这真令人烦恼和错误。我已经向Apple提出了一个错误,但他们还没有做任何事情。

答案 1 :(得分:1)

Swift不提供数字类型之间的自动转换。

通常,您只需按照问题中的方式执行转换。

我不推荐它,但你可以这样做:

func +(i:Int, d:Double) -> Double {
    return Double(i) + d
}

let i: Int = 1
let d: Double = 7.0
i + d
// result: 8.0

您需要提供大量覆盖以涵盖所有基础。就像我说的,我不推荐它。

答案 2 :(得分:-1)

我知道它不安全但是对于一些大的数学例程它没问题,使用@Mike Pollard方法覆盖默认值+&amp; - 运营商:

func + (left: Int, right: Double) -> Double { return Double(left) + right }
func + (left: Double, right: Int) -> Double { return left + Double(right) }
func - (left: Int, right: Double) -> Double { return Double(left) - right }
func - (left: Double, right: Int) -> Double { return left - Double(right) }