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

标签 xcode swift operator-overloading

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

Swift supports the four standard arithmetic operators for all number types:
Addition (+)
Subtraction (-)
Multiplication (*)
Division (/)

Swift supports all standard C comparison operators:
Equal to (a == b)
Not equal to (a != b)
Greater than (a > b)
Less than (a < b)
Greater than or equal to (a >= b)
Less than or equal to (a <= b)

我想知道的原因是,我可以看到什么时候必须使用类型转换,什么时候不需要,因为有两个兼容类型的内置运算符重载。

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

最佳答案

正如 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 是一个 float ,因为 Swift 已经将 foo 隐式类型化为一个整数,它也将 10.4 文字视为一个整数并愉快地将它们相加。

关于xcode - 数字的 Swift 算术和比较运算符重载列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020254/

相关文章:

c++ - 重载运算符必须采用零个或一个参数

java - Kotlin 中 MutableList 成员的索引访问运算符重载

ios - 无法将 NSString 传递给 NSURL URLWithString

xcode - 如何在 Xcode merge 工具中转到下一个冲突?

objective-c - 将 SKShapeNode 添加到 UIViewController (Objective-C)

swift - 你能利用 Swift 的结构默认初始化器来简化参数传递吗?

operator-overloading - Kotlin - 函数的调用运算符重载

iphone - 获取文档目录内容时无法省略 @".DS_Store"文件

ios - Ionic Xcode Emulation 删除数据

ios - 快速使用 Realm