[swift]3.0swift原生数据类型

来源:互联网 发布:重庆时时彩遗漏数据 编辑:程序博客网 时间:2024/06/13 22:22
          3:Swift原生数据类型

3.1 Swift数据类型
•数据类型用来定义变量是属于哪个性质,并加以配置内存。由于swift属于类型安全的语句,所以可以在定义变量前表明类型或者以推导的方式得知。Swift的基本数据类型有整型、浮点型、字符串、字符、布尔,同时也包含所谓的集合类型,如数组和字典。
3.2 整型
•整数分为有、无负的整数。Int表示有负的整数。而Uint表示无负的整数。Swift又提供8,16,32,64位的int和Uint,如int8、int16、int32、int64分别表示8位、16位、32位、64位的int。而Uint8、Uint16、Uint32、Uint64则表示8位、16位、32位、64位的Uint。
一般来说,你不需要专门指定整数的长度。Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:
•在32位平台上,Int和Int32长度相同。
•在64位平台上,Int和Int64长度相同
•除非你需要特定长度的整数,一般来说使用Int就够了。这可以提高代码一致性和可复用性。即使是在32位平台上,Int可以存储的整数范围也可以达到-2,147,483,648~2,147,483,647,大多数时候这已经足够大了。
3.3 浮点型
•float和double都表示浮点数,其中float占4个字节,而double占8个字节。
•浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
•Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。Float表示32位浮点数。精度要求不高的话可以使用此类型。
3.4 数字表示方式
•数字也可以包含格式化信息来使得他们变得易读。整数和浮点数都能前面添加额外的零或者下划线来提升可读性。这两种格式化都不会影响实际的数值:
1.let paddedDouble = 000123.456
2.let oneMillion = 1_000_000
3.let justOverOneMillion = 1_000_000.000_000_1
3.5 进制数字表示方式
•整型类型常量除了以十进制表示外,也可以以二进制、八进制或是十六进制的方法表示。
整数字可以如下书写:
十进制数字,没有前缀
二进制数字,以0b作为前缀
八进制数字,以0o作为前缀
十六进制数字,以0x作为前缀
3.6 指数表示
•浮点型字面量可以额外带一个可选的指数符:
•十进制:可选指数符为e,表示10的n次方,注意有正负。
1.25e2:表示1.25乘以10的2次方,即125.0
1.25e-2:表示1.25乘以10的-2次方,即0.0125
•十六进制:可选指数符为p,表示2的n次方,也有正负之分。
0xFp2:表示15乘以2的2次方,直接写是60.0
0xFp-2:表示15乘以2的-2次方,直接写是3.75
3.7 数字类型之间的转换
•Swift对于类型的检查非常严格,不同类型之间不能随便转换。在通常情况下请使用Int来标记变量或者常量的整数类型,即使已知的数值并不为负,使用默认的整数类型好处是可以保证常量和变量类型的一致性,并且和推测出得类型进行匹配。仅在有特殊需求的时候使用其他的数据类型,比如外来源明确大小的数据,或者是因为性能,内存使用或者其他必要的优化。在这些情况下使用明确的大小的类型能够有助于发现意外数值溢出并潜在记录使用的数据特性。
3.8 整型之间的转换
•对于每种数字类型的常量或变量所能存储的数字的范围是各不相同的。一个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的类型初始化程序。扩展现有类型提供一个接收新类型的初始化程序(包含自己类型定义)来覆盖的扩展。
3.9 整型与浮点型之间的转换
•整数和浮点数之间的转换必须显示的指明:
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,因为数字字面没有一个明确的类型,它们的类型只是通过编译器推断指明出来的。
3.10 布尔型
•Swift中的布尔型(bool)是许多原始函数的基础。我们用枚举来定义MyBool类型的模型,它有两个不同的case:
enum MyBool {
case myTrue, myFalse
}
•Swift 有一个基本的布尔类型 Bool.布尔值被称作逻辑值,因为他们只能是真或者假。Swift 提供了两个布尔常量:true和false.如果你在创建变量和常量的时候,就给他们true或者false,那么就没有必要声明类型为Bool了。使用那些已知类型的值来初始化常量或者变量的时候,类型推断可以使得Swift的代码更加的简洁,更具有可读性。在处理条件语句,比如if语句的时候,布尔值就非常有用。
3.11 元组类型
•定义:元组类型由N个任意类型的数据组成(N>=0),组成元组类型的数据可以称为“元素”
知识点:
1.元组数据中的元素可以有名称也可以没有名称
2.元组数据中的元素可以为空
3.元素访问可以通过元素名称或者下标
4.声明成var的元组数据中的元素可以被改变
5.可以指定元素的类型(在明确指出元素类型的情况下不能加上元素的名称)
6.可以用多个变量接收元组数据
7.可以将元素分别赋值给多个变量
8.可以用下划线_忽略某个元素的值,从而取出其他的元素
9.你可以通过元组创建任意类型的排列,并且可以包含任意数量的不同类型,比如你可以创建 (Int,Int,Int) 或者 (String,Bool) 或者任意其他你需要的排列组合。
3.12 可选类型
•Swift定义后缀来作为标准库中的定义的命名型类型Optional的简写。换句话说,下面两个声明是等价的:
1.var optionalInteger: Int?
2.var optionalInteger: Optional
在上述两种情况下,变量optionalInteger都被声明为可选整型类型。注意在类型和?之间没有空格。类型Optional是一个枚举,有两种形式,None和Some(T),又来代表可能出现或可能不出现的值。任意类型都可以被显式的声明(或隐式的转换)为可选类型。当声明一个可选类型时,确保使用括号给?提供合适的作用范围。比如说,声明一个整型的可选数组,应写作(Int[])?,写成Int[]?的话则会出错。如果你在声明或定义可选变量或特性的时候没有提供初始值,它的值则会自动赋成缺省值nil。可选符合LogicValue协议,因此可以出现在布尔值环境下。此时,如果一个可选类型T?实例包含有类型为T的值(也就是说值为Optional.Some(T)),那么此可选类型就为true,否则为false。
3.13 可选类型概念
•在swift中,可选类型其根源就是一个枚举型,里面有None和Some两种类型。
•可选类型是Swift的一个特色。它表示一个变量有可能有值,也可能没有值(nil)。
声明的方式是“数据类型+问号”。而当要使用一个可选类型的变量是,要在后面加感叹号“!”。
3.14 可选类型值拆包
•如果我们要判断可选类型的值是不是存在,通常会用到一个if-else语句。如果可选类型的值存在,就将可选类型的值取出来。
• 如果我们像正常情况下的打印可选类型的值就会出现上图篮框中的打印内容。但是很显然,我们 只需要Optional(123)中括号中的内容,这就需要将可选类型的值进行拆包。怎么拆包呢?其实很简单,只要在Optional类型的名称之后加一个!即可。即将打印方法写成
println(“(number) has an integer value of (converedNumber!)”) 即可。
ps:如果可选类型没有值的时候,则不能进行拆包,会报错
有些时候,我们明确知道一个可选类型是有值的,这个时候我们就不用再使用if语句check了。这种情况我们把它叫做间接拆包。 对间接拆包的可选类型进行绑定,只需如下图所示即可。因为可选类型的变量(或常量)一直有值,不需要再写else的情况。 间接拆包主要用于类的初始化。如果一个类的初始化过程中包含另外一个类的属性,当使用普通的可选类型的时候,就还需要有一个拆包的过程,这样或造成一个强制引用的问题。因此为了避免强制引用问题,这里类的初始化过程使用间接拆包(这里只是提一下)。
•什么时候用拆包?什么时候使用间接拆包?只要判断可变类型的值会不会出现nil的情况。
3.15 可选绑定
•增加一个临时量并给临时变量赋可选值,通过if条件判断获得可选类型的值,这就叫做绑定。
为什么要绑定呢?绑定了之后,就可以对获取到可选类型值的tempValue做一些操作。用if来进行绑定,主要用于设定一个临时的变量,来进行一些额外的操作。

0 0
原创粉丝点击