数字的Swift算术和比较运算符重载列表?

时间:2014-07-29 16:24:49

标签: xcode swift operator-overloading

文档中是否有位置或者我可以在Xcode 6中动态查找的内容显示数字的所有已定义的运算符重载,例如二进制算术和比较运算符?

  

Swift支持所有数字类型的四个标准算术运算符:
  加法(+)
  减法( - )
  乘法(*)
  分部(/)

     

Swift支持所有标准C比较运算符:
  等于(a == b)
  不等于(a!= b)
  大于(a> b)
  小于(a   大于或等于(a> = b)
  小于或等于(a <= b)

我想知道的原因是我可以看到我何时必须使用类型转换以及何时我不会因为两个兼容类型存在内置运算符重载。< / p>

我有关于类型转换和自动升级的相关问题,但在我发布之前,我想确保我理解Swift默认定义的规则。

1 个答案:

答案 0 :(得分:2)

正如Martin所说,你可以看到一种头文件,它通过命令单击Int或其他一些Swift类型来声明这些函数。例如,乘法函数如下所示:

func *(lhs: UInt8, rhs: UInt8) -> UInt8
func *(lhs: Float, rhs: Float) -> Float
func *(lhs: Int, rhs: Int) -> Int
func *(lhs: UInt, rhs: UInt) -> UInt
func *(lhs: Int64, rhs: Int64) -> Int64
func *(lhs: Float80, rhs: Float80) -> Float80
func *(lhs: Double, rhs: Double) -> Double
func *(lhs: UInt64, rhs: UInt64) -> UInt64
func *(lhs: Int32, rhs: Int32) -> Int32
func *(lhs: UInt32, rhs: UInt32) -> UInt32
func *(lhs: Int16, rhs: Int16) -> Int16
func *(lhs: UInt16, rhs: UInt16) -> UInt16
func *(lhs: Int8, rhs: Int8) -> Int8

所有算术函数都使用两个相同类型的数字并返回该类型的数字。这就是为什么你经常需要在算术运算之前进行转换。

您只需要转换已具有类型的变量或常量。您可以对原始数字文字进行任何算术运算。

在这种情况下,两个操作数都是常量,swift在定义时隐式赋予它们类型:

let a = 42 //compiler assumes Int
let b = 3.14 //compiler assumes Float
a + Int(b) //returns Int (45)

但这并不意味着有一个小数点会强制将文字分配给Float变量。您可以明确强制类型:

var x: Int = 1.1 //shows 1
var y: Float = 1 //shows 1.0

这就是为什么你可以做这样的事情:

var foo = 10
foo + 10.4

尽管10.4是一个浮点字面值,因为Swift已经隐式地将foo键入为Integer,它也将10.4文字视为一个整数,并愉快地将它们加在一起。