近期开始学习Swift语言,在这里做一些笔记用以交流分享。
Swift基础语法
学过C语言,浏览后发现有许多相似处。在这里总结一些不同加以区分。
变量常量
let var
在Swift语言中,我们用let声明常量,var声明变量,例如:
let name = "yoyo"
var age = 18
类型注解
先看一个例子:
var course : String
表示声明一个名为course的变量,类型为String类型。
之后可以通过赋值修改变量值:
course = "Hello Swift!"
输出
使用print实现简单输出
var course = "yoyo"
print(course) //此时会输出"yoyo"
print完整形式为:print( :separator:terminator),后两个参数可忽略
如果要在字符串中插入变量或常量值,可以通过字符串插值\()方式实现:
var age = 18
print("The age is \(age)")//输出 "The age is 18"
基本数据类型
整型
顾名思义,整型就是无小数的数字,包含8、16、32及64位的有符号整型和无符号整型。如UInt32表示32为无符号整型,Int16表示16位有符号整型。
在不同平台,Int的长度有所不同:
32位平台中,Int默认为Int32
64位平台中,Int默认为Int64
不说明具体类型的情况下,Swift语言默认为Int类型:
var age = 18 //在这里, age 被默认为 Int 类型
浮点型
浮点型就是有小数的数字。包含Double类型(64位)和Float类型(32位)。其中Double类型精度更高,至少15位小数,而Float类型只有6位。
不说明具体类型的情况下,Swift语言默认为Double类型:
var score = 90.29 //在这里, score 被默认为 Double 类型
布尔类型
布尔类型针对逻辑的真假,只有两个值:true和false
let dayDayWork = true
如例,当所赋值为true或false时,系统默认为Bool类型
元组
与c不同,元组是一个更加简单易用,功能强大的数据类型,可以将不同类型的数据存放在一个常量中,可以理解成被简化过的类或结构体。
let yuan = ( 18 , "yoyo")
此行代码意为定义了一个yuanzu的元组类型变量,先后存放了Int、String类型的值。
元组内可以排列任意顺序的任意种数据类型,并可用以下方法进行调用:
数组式下标索引
print("The age is \(yuan.0)")
// 输出 The age is 18
print("The name is \(yuan.1)")
// 输出 The name is yoyo
根据定义时的顺序从0开始分别分配下标,可以之间通过下标值进行获取对应值
定义后起名
一一对应
如果我们需要获取到元组中每个元素的值,我们可以按照如下方法进行一一对应起名:
let (age , name) = yuan
print("The age is \(age)")
// 输出 The age is 18
缺省式
如果我们只需要元组中部分元素值,假设我们需要获取到18,可以按如下方法进行:
let (age , _) = yuan
print("The age is \(age)")
// 输出 The age is 18
不需要的用下划线_代替,需要的起个名再正常调用即可
定义时起名
let yuan = (age : 18, name : "yoyo")
print("The age is \(yuan.age), the name is \(yuan.name)")
//输出The age is 18, the name is yoyo
需要注意的是,定义时起名相当于用起的名替代了下标的作用,可以理解成结构体的用法,访问时需要用yuan.age的方式获取具体值。
但定义之后再起名相当于重新定义了一个存储元组内相应值的常量,如示例中是定义常量age存储18,访问时直接访问age即可。
数值型字面量
整数字面量
十进制数,无前缀
二进制数,前缀0b
八进制数,前缀0o
十六进制数,前缀0x
13的各进制表示如下:
let ten = 13 //十进制
let two = 0b1101 //二进制
let eight = 0o15 //八进制
let sixteen = 0xD //十六进制
浮点型字面量
十进制用e表示,e后的数字num表示10的num次方:2.44e3意为2.44×10³
十六进制用p表示,p后的数字num表示2的num次方:0xBp-2意为11×2^-2=11×0.5²
特殊格式
可以加前导0,后导0,_来增加可读性:
let num = 0_012.340_0
注释
单行注释 //
// 用 // 来进行单行注释
多行注释 /* */
/*
多行
注释
长这个样子
*/
多行注释的嵌套
/*
多行注释
/*多行注释的多行注释*/
*/
类型安全
Swift是一个类型安全的语言,会在编译时进行类型检查,若类型不匹配会报错,例如将String类型值赋值给Int类型是不可行的。好处是避免了默认进行强制类型转化后丢失精度或引发其他不易查找的未知错误。
类型转换
整数类型转换
由于Swift在编译时会进行检查类型是否匹配,所以下面这段代码是无法正常编译的:
let a : UInt8 = 2
let b : UInt32 = 4
let c = a + b
a为UInt8类型,而b为UInt32类型。想要正常运算就必须进行类型转换:
let a : UInt8 = 2
let b : UInt32 = 4
let c = a + UInt8(b)
其中 UInt8(b) 的具体含义为,创建了一个新的UInt8类型整型,并使用b进行赋值,此时c也被默认为UInt8类型。
整数和浮点数转换
与整数相似,必须类型匹配才可以进行运算。
整型->浮点型
如下:
let x = 4
let y = 3.21 //y被默认为Double类型
let z = Double(x) + y//z也被默认为Double类型
浮点型->整型
与整型->浮点型具有相同的格式,不再赘述。注意的是小数部分会直接抹去而不是四舍五入!
Int(-2.7)=-2