Swift 快速类型转换
全部: 根据Swift编程书,p。52,下面的代码不应该工作,因为x是Int64,y显然是Int16,但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
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
文件: