Swift 快速类型转换

Swift 快速类型转换,swift,type-conversion,Swift,Type Conversion,全部: 根据Swift编程书,p。52,下面的代码不应该工作,因为x是Int64,y显然是Int16,但Swift批准 var x:Int = 32 var y:Int16 = 12 x + y 如果我使用-、*或/,编译器不支持对象,那么这是一个bug吗?如果没有,那么+有什么不同 Michael+操作符有两个通用声明,可以处理一侧的可移动的值,另一侧的值与第一个值的跨距的别名匹配。它在这种情况下起作用是因为(a)Int16通过RandomAccessIndexType符合Streable

全部:

根据Swift编程书,p。52,下面的代码不应该工作,因为x是Int64,y显然是Int16,但Swift批准

var x:Int = 32
var y:Int16 = 12

x + y
如果我使用-、*或/,编译器不支持对象,那么这是一个bug吗?如果没有,那么+有什么不同


Michael

+
操作符有两个通用声明,可以处理一侧的
可移动的
值,另一侧的值与第一个值的
跨距的别名匹配。它在这种情况下起作用是因为(a)
Int16
通过
RandomAccessIndexType
符合
Streable
,并且
Int
Int16
和所有其他整数类型的
Stread
别名

换句话说,您正在调用这些函数中的第一个,而不是第二个:

// 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
//左边是Int,右边是Int16:
func+(左:T.步幅,右:T)->T
//Int16必须位于两侧:
func+(左:Int16,右:Int16)->Int16
文件: