Swift 4 Introduction系列1.4 — Swift数据类型转换
我们无法对具有不同数据类型的变量执行计算。 例如,我们不能添加带有整数(Int)变量的浮点数(Double)。 为了能够执行这样的计算,我们必须将整数转换为浮点数。 同样,我们不能使用UInt16变量添加属于数据类型Int8的变量。
对于数据类型之间的转换,语法如下:
让 = ()
要么
var = ()
要么
= ()
数据类型转换的基本规则是: 要转换的数据类型可接受要转换的数据 。
因此,我们必须知道数据类型限制,以便我们能够正确执行转换。
要在位大小数据之间转换,我们需要使用以上语法。
例:
设numberA:UInt8 = 87
让numberB:Int16 = 43
设numberC = 23个let numberD = Int16(12)let numberE = Int32(numberA)
var numberF = UInt16(numberB)
令numberG = UInt64(numberC)numberF = UInt16(numberD)
如上面的示例所示,我们可以在转换括号中包含数字文字,如NumberD所示。 要重新分配变量,我们需要将转换器的数据类型与等式左侧的变量匹配,如最后一条语句中的numberF所示。 对于声明,请注意,变量将采用转换器指定的任何数据类型。
我们还可以先声明常量或变量,然后再执行赋值。 请注意,转换器必须与声明的变量或常量具有相同的数据类型。
例:
设numberI:UInt64numberI = UInt64(numberA)var numberJ:Int16numberJ = Int16(numberC)
我们还可以执行如下所示的计算:
令numberH = UInt32(numberA)+ UInt32(numberB)+ UInt32(numberC)
在上面的示例中,如果任何数字是我们想要的数据类型,我们可以忽略转换器。 请参见下面的另一个示例。
在下面的示例中,我们将添加一个Int8,Int16和UInt32。 如果我们想要的总和的数据类型在操作数中(在本例中为UInt32),那么我们可以忽略转换器。
例:
让numberX:Int8 = 54
让numberY:UInt32 = 885665
让numberZ:Int16 = 2565let numberXYZ = UInt32(numberX)+ numberY + UInt32(numberZ)
重要说明:请注意,在转换期间,分配的数据类型必须能够接受转换后的数字。
例:
let numberK:UInt32 = 522 //由于Int8不能接受大于128let的任何数字,因此以下语句将生成错误numberL = Int8(numberK)
更多示例:
//:对于数据转换,请使用desiredDataType(InitialValueOrVariable)
让val36:UInt16 = 0xFFFE
令val37:UInt8 = 1
令val38:UInt16 = val36 + UInt16(val37)
// let val39 = val36 + 2 //此语句将产生错误,因为它将超过其最大值
令val39 = Int(val36)+ 2
//在上一条语句中,我们将val36从UInt16转换为Int,以允许更多数字。
如前所述, UInt和Int源自CPU功能。 如果CPU是32位,则UInt和Int分别与UInt32和Int32相同。 假设我们的CPU是64位的,那么我们可以互换使用Int64或Int。 但是,建议保持Int的互操作性。
要在UInt和Int之间转换,我们可以使用前面提到的相同语法。
例:
//从Int转换为Uint
令numberM = 21546658785652令numberN = UInt(numberM)
范例2:
//从UInt转换为Int
让numberO:UInt = 321654655var numberP = Int(numberO)
要在Float和Double之间进行转换,我们使用相同的语法。
例:
//从Float转换为Double
让shortDecimal1:Float = 2.658846542let longDecimal1 = Double(shortDecimal1)
从上面的示例中,我们还注意到十进制数字与最初输入的数字并不完全相同。 这是由于计算机使用浮点数的方式。 最后一位或2可能不正确。 实际上,在十进制精度很重要的情况下,我们通常会舍弃最后两个小数位。
范例2:
//从Double转换为Floatlet longDecimal2 = 9.32655646655879523let shortDecimal2 = Float(longDecimal2)
为了从小数点后的位转换为小数点后的位,通常将长格式截断。
下面的示例演示了从整数到浮点数(双精度)的转换。
例:
//从Int转换为Doublelet number1 = 2546let number2 = Double(number1)print(number2)
如果我们看一下右边的结果,显示编号是相同的。 如果我们使用print语句,由于常量是双精度数,它将打印带有.0的数字。
要将浮点数转换为整数,请注意,系统将删除小数点并保留整数。 系统将不会舍入到最接近的整数。 它将只删除小数位。
例:
//从Double转换为Intlet number3 = 2.99464513let number4 = Int(number3)print(number4)
同样,在执行计算和数据类型转换时,我们不需要转换具有所需数据类型的操作数。
例:
让number10 = 6
让number11 = 0.654596let number12 = Double(number10)+ number11
更多示例:
//要使用整数和浮点数执行计算,请始终将整数转换为浮点数
令val40 = 2
令val41 = 0.1718
令val42 = Double(val40)+ val41
//如果我们不将val40转换为Double,则前一条语句将产生错误,因为我们无法使用Double添加Integer
令val43 = 2 + 0.1718
要将文本转换为数字,文本必须为正确的数字:
例:
//从字符串转换为Double / Int
让text1 =“ 12.345” let number5 = Double(text1)let number6 = Int(text1)let text2 =“ 556” let number7 = Int(text2)
如上例所示,字符串“ 12.345”不能转换为Int。
例:
//从Double / Int转换为String
让number8 = 256let文本3 =字符串(number8)let number9 = 2.78846562 var text4 =字符串(number9)
更多示例:
//若要将数字与字符串一起使用,我们需要将数字数据类型显式转换为字符串
让myName =“ Thomas”
让mySocialSecurity = 12532455
让myLine1 = myName +“社会安全号码为” + String(mySocialSecurity)//或我们可以对字符串进行插值
让myline2 =“ \(myName)的社会保险号为\(mySocialSecurity)” let hisName1 =“ Steve”
让他的收益:浮动= 145258
让myLine3 =“ \(hisName1)刚刚为此项目赚了$ \(hisEarnings * 0.25)。
类型转换也称为数据类型类型转换。 以下示例展示了对基本数据类型的全面类型转换:
//:综合类型转换
//从字符串转换为整数
让str1 =“ 9384”
令num1 = Int(str1)
num1 //从整数转换为字符串
让num2 = 5478955
让str2 =字符串(num2)
str2 //从字符串转换为32位整数
让str3 =“ 454234”
let num3 = Int32(str3)//从默认整数转换为16位整数
让numi1 = 54
let numi2 = Int16(numi1)//从默认整数转换为8位整数
让numi3 = 12
let numi4 = Int8(numi3)//从默认的8位整数转换为默认整数
令numi5 = numi4
let numi6 = Int(numi5)//从默认double转换为float
令num4 = 25.3
let num5 = Float(num4)//从float转换为double
令num6 = num5
let num7 = Double(num6)//从默认的double转换为整数。 请注意,小数点将被截断。
令num8 = 32.946
let num9 = Int(num8)//从整数转换为双精度。 价值不变。
让num10 = 2145
let num11 = Double(num10)//从双精度转换为字符串
让num12 = 32.65
let str4 = String(num12)//从字符串(带小数)转换为浮点型和双精度型。 请注意,浮点数可以接受更少的小数
让str5 =“ 2145.3256525656”
让num14 = Float(str5)
令num15 = Double(str5)
最初于 2018 年4月16日 发布在 blog.swifticode.com 上。