快速类型转换

标签 swift type-conversion

全部:

根据 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,而 IntStride 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/

相关文章:

ios - 早点从 UIViewPropertyAnimator 完成一些动画

arrays - 如何使用 Swift 将 Array.count 结果移动 -1?

rust - 如何在 Rust 中使用 From trait 实现双向转换?

c++11 - 在 gdb 中调用 std::~basic_string()

ios - 如何从 HealthKit 运行锻炼中获取海拔增益、步频和运行配速?

swift - 自定义 UITableViewCell 中的 UIView 在滚动时重绘

ios - 我们如何在 swift 4 和 IOS 11 中更改语音识别语言?

unsigned int 和 unsigned char 的比较

c++ - Long Long 数据类型的 Cuda 算术除法错误

Haskell:从 POSIXTime/NominalDiffTime 中提取 Int