程序员人生 网站导航

芒果iOS开发之Swift教程02-Swift基本数据类型

栏目:综合技术时间:2016-12-04 14:32:08

【主要内容】

1.整型

2.浮点型

3.类型安全和类型推断

4.数值型字面量

5.数值类型转换

6. 类型别名


1、整型

1.1 整数和整型

编程语言中的整型是用来表示我们自然界中的整数。先来补习1下小学的知识,整数的概念:正整数、零、负整数统称为整数。

依照有没有符号可以分为两种:1.有符号整数(正整数、零、负整数)2.无符号整数(正整数和零)

Swift提供了8,16,32和64位的有符号和无符号的整数类型,比如:8位无符号整数类型是UInt8,32位有符号整数类型Int32


1.2 整型表示的范围

Swift中提供了minmax属性来访问不同整数类型的最小值和最大值,比如8位无符号/有符号整型表示的最大值最小值,如图:



1.3 Int类型

1般写代码的时候不需要专门制定整数类型的长度,Swift还提供了1个特殊的整数类型:Int,Int类型的长度取决于当前平台的系统位数:

在32位平台上Int类型就是32位,和Int32长度相同。

在64位平台上Int类型就是64位,和Int64长度相同。


1.4 UInt类型

UInt类型和Int类型1样,它的长度取决于当前平台的系统位数。

注意:

开发中尽可能不要使用UInt类型,最好使用Int,即便你要贮存的值就是非负数。可以提高代码的复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断。


2、浮点型

浮点数就是带有小数点的数字,比如常见的:3.14,0.618。Swift中提供了两种浮点数类型:

Float 表示32位浮点数。精度要求不高的话使用此类型。

Double表示64位浮点数。当需要贮存很大或很高精度的浮点数的时候才使用此类型。

注意:

Double的精度可以到达小数点后最少15位数字,而Float只有小数点后6位。1般来讲Float类型足够用。


3、类型安全和类型推断

Swift是1种类型安全(type safe)的语言。类型安全的语言可让你清除的知道代码要处理的值的类型。如果你的代码需要传递的参数是String类型,那末你绝对不可能不谨慎船进入1个非String类型。

由于Swift是类型安全的,所以它会在编译你的代码时进行类型检查(typy checks),并把不匹配的类型标记为毛病,这样可让你尽早的发现问题并修复。

当你要处理不同类型的值时,类型检查可以帮你避免毛病。但是你没必要每次声明常量、变量的时候都显示制定类型,如果没有制定类型,Swift会使用类型推断(type inference)帮你选择适合的类型。原理就是检查你的赋值便可。

虽然有类型推断,但是Swift很少需要自己显示声明类型,这些工作交给编译器去做就能够了。

 例如:

声明1个没有标注类型的常量money,赋值998,Swift可以推断出常量的类型是Int,从下图控制台的信息可以得到论证:


如果你给变量、常量赋值了1个浮点类型的值,Swift会默许推断为Double类型,如图:



4、数值型字面量

1个整数的字面量可以被写成以下几种情势:

1个10进制数,没有前缀

1个2进制数,前缀是0b

1个8进制数,前缀是0o

1个106进制数,前缀是0x

比如:



浮点型字面量可以是10进制(没有前缀)或106进制(前缀是0x)。小数点两边必须有最少1个10进制数字(或是106进制的数字)。10进制浮点数也能够有1个可选的指数(exponent),通过大写或小写的e来制定,106进制浮点型数必须有1个指数,通过大写或小写的p来指定。

如果1个10进制数的指数为exp,那这个数相当于基数和10^exp的乘积:

1.25e2 表示1.25 × 10^2,等于125.0。

1.25e⑵表示1.25×10^⑵,等于0.0125。

如果1个106机制数的指数为exp,那这个数相当于基数和的2^exp的乘积:

0xFp2表示15×2^2,等于60.0.

0xFp⑵表示15×2^⑵,等于3.75。

下面的这些浮点字面量都等于10进制的12.1875:

let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0


数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包括下划线,其实不会影响字面量:

let paddedDouble = 000123.456 let oneMillion = 1_000_000 let justOverOneMillion = 1_000_000.000_000_1

5、数值型类型转换

在开发的时候,如果没有明确说1定要声明无符号整型(要求优化性能、减少内存占用等),请使用系统默许的Int类型。由于系统默许整数类型的字面量默许的类型推断也是Int类型。

5.1 整数之间的转换

不同的整数类型存储的范围不同,可以通过max和min属性得到。Int类型可以存储的数值范围:⑴28~127,UInt类型存储的数值范围:0~255。如果超越了这个范围系统在编译的时候就会报错:

上边这两个毛病就是说:你存储的值溢出了当前这个类型所表示的范围。

如果想要两个不同整数类型的值进行操作的时候,必须要转化成相同的类型:

let value1: UInt16 = 2_000 let value2: UInt8 = 1 let value3 = value1 + UInt16(value2)

value1是UInt16类型,value2是UInt8类型,需要先用SomeType(ofInitialValue)方法将value2转化为UInt16类型的数再进行运算。

5.2整数和浮点数转换

整数和浮点数的转换必须显式指定类型:

let integerValue = 7 let fValue = 3.14 let fNumber = Double(integerValue) + fValue print("fNumber = \(fNumber)")

常量integerValue被转换成了Double类型,这样加号两边的数类型相同就能够进行运算。

浮点类型一样可以转换成整数类型:

let integerNum = Int(fValue) print(integerNum)

当浮点类型转换为整数类型的时候,浮点类型会丢失精度,只保存浮点类型的整数位。上边integerNum输出的值为3。

注意:

数字类型的常量或变量进行运算,不同于数字字面量之间进行运算。数字字面量可以直接进行运算,比如3 + 0.1415,由于数字字面量本身没有肯定的类型,但是数字类型常量、变量是会被编译器推断出具体类型的,只有类型相同才能进行运算。


6、类型别名

类型别名(type aliases)就是给现有的类型定义1个新的名字。跟OC里边的typedef是类似。在Swift中你可使用typealias关键字来定义类型别名。平常在开发的时候偶尔也会用到但是不多。类型别名在苹果的Api里边大量的出现,特别是在1些地图类、音视频类等等的Api里边,常常会给现有类型起1个更成心义的别名。

比如:在GCD里边,如果想要某个线程延迟几秒履行,你得先定义1个延迟时间dispatch_time_t ,你点击进去查看Api就会发现其实它是UInt64类型:


下边自己定义1个类型别名:

typealias requestTimeOut = Int var time:requestTimeOut = 10 time = 7 print(time) print(requestTimeOut.max)

上边的定义了1个要求超时时间的类型别名,那末之前需要用到Int的地方就能够直代替换成requestTimeOut。


欢迎大家关注”芒果iOS“微信公众账号,芒果会常常为大家分享好的技术文章:




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐