Swift之类型转换

在你的代码中即使知道整数常量和变量是非负数也用Int类型来通用于所有的整数。在平常情况下使用默认的整数类型意味着整数常量和变量能及时的相互操作,并且能通过整数字面量值来匹配推断出的类型。

只有在当前任务的一些特定需求时才使用其它整数类型,因为来自外来的数据的大小是明确的,或者是因为性能,内存使用,或者其它必要的优化。在这些情况下用大小明确的类型用助于捕获意外的值溢出和被用于隐式文本所使用的原始值。

整数转换


对于每种数字类型的常量或变量所能存储的数字的范围是各不相同的。一个Int8的常量或者变量能存储从-128到127之间的数字,然后Int的常量或变量能存储0到255之间的数字。当一个数字在一个整数类型的常量或变量所表述的范围之外进行赋值时,在编译代码时就会报出一个错误:

      let cannotBeNegative: UInt8 = -1    // UInt8 不能存储一个负数

      let TooBig: Int8 = Int.max + 1       // Int8不能存储比它的最大值还要大的值

因为第个数字类型存储不同范围的值,你必须在个别的基础上选择加入数字类型转换。这种选择机制阻止了隐藏的转换错误帮助你作出明确的类型转换意图。

把一个指定数字类型转换成另外一种类型,你可以用这个存在的数字来初始化一个你期望想得到的类型新数字。下边这个例子中,常量twoThousand在的类型是UInt16,然而,常量one的类型是UInt8,他们不能直接相加在一起,因为他们的类型不一样。这个例子中可以把one做为初始值调用UInt16(one)来创建一个新的UInt16,用这个新的数字来代替原来的位置。

  let​ ​twoThousand​: ​UInt16​ = ​2_000

  let​ ​one​: ​UInt8​ = ​1

  ​let​ ​twoThousandAndOne​ = ​twoThousand​ + ​UInt16​(​one​)

因为加法两边都的类型都是UInt16,这种加法是允许的。输出常量(twoThousandAndOne)的类型被推断出来是UInt16,因为它是两个UInt16值的和。

Swift类型初始化时调用默认方法SomeType(初始化值)比如Double(value),Int8(value),并把初始值传递给它。在后台,UInt16有一个初始化程序来接收一个UInt8的值,这个初始化程序通过接收到的UInt8的值来创建一个新的UInt16。在这里不能随便传递一个类型,不管怎样,它必须提供一个UInt16的类型初始化程序。扩展现有类型提供一个接收新类型的初始化程序(包含自己类型定义)来覆盖的扩展。

整数和浮点数的转换

整数和浮点数之间的转换必须显示的指明:

      let three = 3

     let pointOneFourOneFiveNine = 0.14159

     let pi = Double(three) + pointOneFourOneFive   // pi = 3.14159 pi的类型为Double

在这里,常量three的值被用于创建一个类型为Double的新数字,所以在加号的两边的类型是一样的。如果没有进行转换,这个加法运算将不能被允许通过。

浮点数转整数也必须得明确的指明。一个整数可以通过一个双数度数或一个单精度数来初始化:

    let integerPi = Int(pi);  // integerPi = 3 类型为Int

当把一个浮点数转换为一个整数时其浮点数的值最会被截取小数部分。这意味着 4.75 转换成4,-3.9转换成-3.

注意:对于数字常量和变量的合并的标准和数字字面量值的合并标准是不同的。字面量3可以直接加字面量0.14159,因为数字字面没有一个明确的类型,它们的类型只是通过编译器推断指明出来的。

  

原文地址:https://www.cnblogs.com/nj20091571/p/4412084.html