Swift:使用不同整数时的错误

Dav*_*sen 1 cocoa ios swift

我一直在试用Swift,因为它显然是Apple希望我们进入的方向.但是,我真的很生气,因为你似乎无法添加不同大小的整数:

    var a: Int64 = 1500
    var b: Int32 = 12349

    var c = a + b
    if a < b { ... }
Run Code Online (Sandbox Code Playgroud)

产生的错误是"无法找到接受提供的参数的'+'的重载' - 显然,因为它们是对象类型.所有类方法似乎都没有任何帮助上/下转换整数.

同样的情况适用于任何类型的别名,显然,(CInt + CLong).

我可以看到很多真实情况,能够进行整数运算非常实用,更不用说在两个不同大小的整数上进行比较或按位运算.

怎么解决这个?使用as运算符进行显式转换似乎不起作用.Swift语言书也没有多大帮助,因为它没有真正讨论这个场景.

nsc*_*hum 7

Swift语言书确实在"数字类型转换"一章中讨论了这个场景:

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
Run Code Online (Sandbox Code Playgroud)

因为添加的两侧现在都是UInt16类型,所以允许添加.输出常量(twoThousandAndOne)被推断为UInt16类型,因为它是两个UInt16值的总和.

  • Go有同样的限制.它避免了很少发生的多种错误,但是当它们发生时很难调试(通常在现场).这就是为什么它明确建议你尽可能只使用`Int`. (3认同)

Gau*_*ani 7

let a: Int64 = 1500
let b: Int32 = 12349
let c = a + Int64(b)
println("The value of c is \(c)")
Run Code Online (Sandbox Code Playgroud)