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

Xcode 数字的Swift算术和比较运算符重载列表?,xcode,swift,operator-overloading,Xcode,Swift,Operator Overloading,文档中有没有一个地方,或者我可以在Xcode 6中动态查找的东西,它显示了所有定义的数字运算符重载,比如二进制算术运算符和比较运算符 Swift支持所有数字类型的四个标准算术运算符: 添加(+) 减法(-) 乘法(*) 分部(/) Swift支持所有标准C比较运算符: 等于(a==b) 不等于(a!=b) 大于(a>b) 小于(a=b) 小于或等于(a正如Martin所说,您可以看到一种头文件,它通过命令单击Int或其他Swift类型来声明这些函数。例如,乘法函数如下所示: func *(lhs

文档中有没有一个地方,或者我可以在Xcode 6中动态查找的东西,它显示了所有定义的数字运算符重载,比如二进制算术运算符和比较运算符

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

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

小于或等于(a正如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
var foo = 10
foo + 10.4
所有的算术函数都接受两个相同类型的数字并返回一个相同类型的数字。这就是为什么在进行算术运算之前必须进行转换的原因

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

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

let a = 42 //compiler assumes Int
let b = 3.14 //compiler assumes Float
a + Int(b) //returns Int (45)
但这并不意味着小数点将强制将文本分配给浮点变量。您可以显式强制类型:

var x: Int = 1.1 //shows 1
var y: Float = 1 //shows 1.0
这就是为什么你可以做这样的事情:

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
var foo = 10
foo + 10.4

尽管10.4是一个浮点文本,但由于Swift已经隐式地将foo类型化为一个整数,因此它也将10.4文本视为一个整数,并愉快地将它们相加。

当您命令单击Swift类型(例如Int)时,您会看到一个(自动生成)包含所有类型、运算符、构造函数等的文件…我已经看过了,但我没有看到这样的定义,即在没有强制转换的情况下向浮点添加Int是合法的(例如1+0.8),但是如果其中一个实际上是变量或常量,则必须使用强制转换。谢谢。您的“foo+10.4”这个例子引出了我下一个关于类型转换和升级的问题,但我觉得这应该是它自己的问题,而不是关于这个问题的“讨论”。得到Int类型的20的结果似乎是错误的。如果编译器发出警告,那是一回事,但简单地截断10.4是不好的。这有点奇怪。c(很可能是大多数受c语言启发的语言)也做了同样的事情。
intx=0.9;printf(“%d”,x);
prints 0还有swift中关于文字的页面:“没有c的目标c”…嗯,有点像。关于整数和浮点转换的页面