全部:
根据 Swift 编程书,p. 52,下面的代码应该不起作用,因为 x 是 Int64 而 y 显然是 Int16,但 Swift Playground 批准。
var x:Int = 32
var y:Int16 = 12
x + y
如果我使用 -、* 或/,编译器会反对,这是一个错误吗?如果不是,+ 有什么不同?
迈克尔
最佳答案
+
运算符有两个通用声明,可以在一侧处理 Strideable
值,在另一侧处理与第一个值的 Stride< 匹配的值
别名。它在这种情况下有效,因为 (a) Int16
通过 RandomAccessIndexType
符合 Strideable
,而 Int
是 Stride
Int16
和所有其他整数类型的别名。
换句话说,您调用的是这些函数中的第一个,而不是第二个:
// Int on the left, Int16 on the right:
func +<T : Strideable>(lhs: T.Stride, rhs: T) -> T
// Int16 would have to be on both sides:
func +(lhs: Int16, rhs: Int16) -> Int16
文档: Int16
type , +
operator , Strideable
protocol .
关于快速类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496415/