变量和常量的声明
声明时使用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)")
}
所有的值类型在赋值的时候都会进行拷贝,
值类型包括:数字,字符串,数组,字典,结构体