Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

芒果iOS开发之Swift教程02-Swift基本数据结构

$
0
0

【主要内容】

1.整型

2.浮点型

3.类型安全和类型推断

4.数值型字面量

5.数值类型转换

6. 类型别名


一、整型

1.1 整数和整型

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

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

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


1.2 整型表示的范围

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



1.3 Int类型

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

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

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


1.4 UInt类型

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

注意:

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


二、浮点型

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

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

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

注意:

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


三、类型安全和类型推断

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

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

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

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

 例如:

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


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



四、数值型字面量

一个整数的字面量可以被写成以下几种形式:

一个十进制数,没有前缀

一个二进制数,前缀是0b

一个八进制数,前缀是0o

一个十六进制数,前缀是0x

比如:



浮点型字面量可以是十进制(没有前缀)或者十六进制(前缀是0x)。小数点两边必须有至少一个十进制数字(或者是十六进制的数字)。十进制浮点数也可以有一个可选的指数(exponent),通过大写或者小写的e来制定,十六进制浮点型数必须有一个指数,通过大写或者小写的p来指定。

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

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

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

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

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

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

下面的这些浮点字面量都等于十进制的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

五、数值型类型转换

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

5.1 整数之间的转换

不同的整数类型存储的范围不同,可以通过max和min属性得到。Int类型可以存储的数值范围:-128~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,因为数字字面量本身没有确定的类型,但是数字类型常量、变量是会被编译器推断出具体类型的,只有类型相同才能进行运算。


六、类型别名

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

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


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

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

上边的定义了一个请求超时时间的类型别名,那么以前需要用到Int的地方就可以直接替换成requestTimeOut。


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




作者:CrazyZhang1990 发表于2016/9/19 17:58:29 原文链接
阅读:126 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>