Swift -- 2.基本数据类型

变量和常量的声明

声明时使用var

声明时必须显式或隐式的制定变量类型

Swift的整数数值有4种表示方式:

十进制

二进制:以0b开头

八进制:以0o开头

十六进制:以0x开头

Swift的浮点数有3种表示形式:

十进制形式:5.12

科学记数形式:5.12e2(5.12x10^2)

十六进制数形式:这种形式的浮点数必须以0x开头,且需要使用p代表指数部分,其中p代表乘以2的p次方 0x5.a2p2 = 0X5.a2*2^2

数值之间的类型转换

Swift编译器对类型检查非常严格

整数之间的转换必须是显式转换,浮点型和整型之间的转换也必须是显式转换

例:将Int8类型的值转换成Int16类型的值

var a : Int8 = 6;

vat b : Inte16 = Int16(a);

如果不使用显式类型转换编译会不通过,类型转换不合理在运行时会出错 

布尔型

在Swift语言中,Bool类型的数值只能是true或false,不能用0或者非0来代替,其他数据类型的值也不能转换成Bool类型

元组(tuple)类型

使用圆括号把多个值组合成一个复合值

一个元组内的值可以使用任意类型

一个元组内的的成员也可以是个元组

元组是一种实用的数据类型,Swift函数支持多个返回值,这里的返回值是以元组的形式返回的

定义一个元组:

var health = (123,12,“test”)   //直接赋值,swift会推断元素类型

var score : (Int , Int , String , Double)  //指定变量类型来定义

var test = (123, (123,123))  //元组中可以嵌套元组元素

var health1 = (height:182 , weight:66 ,status:"good")  //给元素命名,并直接赋值

var score1 : (height:Int ,weight:Int ,status:String)  //给元素命名,指定元素类型

给元组赋值:

score = (1,2,“test”,2.4)

给一个元组赋值的时候必须给所有成员都指定值

如果给元组中元素指定名字,元组中的元素的位置就可以随意调换

health1 = (weight:55 , height:99, status:"good")

获取元组中的元素值

1 使用 . 加索引来获取

获取health元组的第一个元素   health.0

获取test元组的第二个元素中元组的第一个元素 test.1.0

2 声明常量或变量来获取

var (height, weight, status) = health

print("(height)(weight)(status)")

获取部分变量,不需要的用下划线代替

var (height, weight ,_) = health

3 如果给元素指定了名字,可以使用变量名来获取元素

health1.height

可选类型

c和oc中都没有这个类型,是Swift自己的特性

在类型后面加个问号就是可选类型,比如Int?,String? 都是可选类型

当值缺失时,可选类型会被置为nil

var str = "ss11"

var num : Int = Int(str) //这句是错误的,因为String转为Int类型有可能会失败,所以需要可选类型 var num : Int? = Int(str)

var num = Int(str) //这句是正确的,Swift自动判断num为Int?类型

将字符串转换为Int类型还有一种方式

var num = (str as NSString).IntValue

系统会自动将num判断为Ins32类型的数据,当str为ss11时,num为11,当str为11ss时,num为0,当str为ssss时,num为0

所以说,IntValue这种形式不太安全

在oc中,nil代表空指针,在Swift中,nil代表“值缺失”,任何可选类型的变量都可以被赋值为nil

String?是可选类型,不能直接赋值给String类型,需要进行强制解析:在可选类型后面加叹号

var str :String? = "fff"

var str1 = str!

使用强制解析必须是在可选类型值不为nil的情况下来进行的,所以在进行强制解析之前需要先判断可选类型是否真的有值

在使用if语句的时候,也可以使用可选绑定

var str4 : String? = "ccc"

if var str5 = str4{

      print("(str5)") //在str4有值的时候,就可以绑定成功,否则失败

}

在自己创建的类型后面加!同样可以成为可选类型,在赋值的时候不需要再加叹号,系统会自行隐式解析

类型别名

给一个已有的类型定义一个可读性更强的名字

typealias Counter = Int16

var int5, int6 : Counter

字符和字符串类型

字符类型:

1 单个字符 var s : Charecter = "sss"

2 转义字符 var s : Charecter = " "

3 u{n}的Unicode形式  var s : Charecter = "u{22}"

字符串类型:

定义字符串变量:var name : String = "marry"

String的本质是结构体,所以也可以这样定义

var str8 = String() //声明一个空字符串,可以使用isEmpty 属性来判断字符串是否为空

var str9 = String(count: 1, repeatedValue: Character("f")) //声明一个具有多个重复字符的字符串

Swift的String类型可以与Foundation框架的NSString类型无缝桥接

在oc中,字符串是一个类,当给一个类的属性赋值时,传递的是字符串对象的指针,并不会赋值字符串对象的副本

在Swift中,字符串是一个结构体,当进行赋值时,总是会复制一个副本,传递的是原字符串实例的副本

使用+拼接字符串

var info = "sss" + "fff"

oc中NSString是不可变字符串,NSMutableString是可变字符串

Swift中只有String,let声明的是不可变的,var声明的是可变的

获取字符串长度

var str2 : String = "ddd"

let length = str2.characters.count

字符串比较

1 字符相等  直接用==运算符来判断

2 前缀相等

3 后缀相等

获取字符串中字符的Unicode编码

let cn = "chine,ff"

for codeunite in cn.utf8

{

    print("(codeunite)")

}

for codeunite in cn.utf16

{

    print("(codeunite)")

}

for codeunite in cn.unicodeScalars

{

    print("(codeunite.value)")

}

所有的值类型在赋值的时候都会进行拷贝,

值类型包括:数字,字符串,数组,字典,结构体

原文地址:https://www.cnblogs.com/chebaodaren/p/5407533.html