1.声明变量 常量
声明变量:var age = 10
声明常量:let age = 10 (不加分号,除非多条语句写在同一行)
二进制前缀:0b(必须小写)
八进制前缀:0o
十六进制前缀:0x
2. 基本数据类型:
Int Float Double Bool Character String Array Dictionary Tuple(元组类型) Optional(可选类型)
Swift中的中包括有符号整型和无符号整型
字符串:@"abc(x)" x为一个整型数据或其他:在Swift中没有stringWithFormat的用法 用()代替
1> 定义一个指定类型的变量/ 常量,如下格式:
let age: Int = 10
2> Swift中的小数默认为Double型,需要自行设置为Float
3> Swift强调语法安全:不同类型的两个变量 不能相加
4> 浮点数可以用十进制和十六进制表示
十进制表示浮点数:eN:10的N次方
// 没有指数时 let d1 = 12.5 // 有指数 let d2 = 0.125e2
十六进制表示浮点数:pN:2的N次方 d3 = (8/16 + 12) * 1 = 12.5
let d3 = 0xC.8p0 // d3 = 0xC.8 * 2的0次方 = 12.5
3. Swift运算符:
1> 赋值=:
Swift可进行多个赋值:
基本的逻辑运算都一些样 强调赋值运算符:
= OC中的赋值运算符有返回值if(x = y)为永真
Swift中这种写法属于语法错误,Swift中=没有具体返回值
2> 取余运算%:
Swift可以对浮点型数据进行取余运算
a % b 结果所得余数的正负和a的符号一致
3>比较运算符:
Swift中的if语句必须是Bool型 true为真 false为假 没有C语言中非0为真的说法
三目运算符中的条件也必须是Bool型的 比较运算符和逻辑运算符的返回值为true 和 false两种(不是1 0)
4> 范围运算符(Swift新增)
a...b:范围是:[a, b]
a..<b: 范围是:[a, b)
Swift中的for循环:
for i in 0...5 { // 执行6次 :0 1 2 3 4 5 }
5> 溢出运算符:
&+ &- &/ &* &%
上溢出:最大值+1结果为0 下溢出:最小值-1结果为最大值
4. Swift新增的特殊数据类型:
1> 元组类型Tuple:
定义:有N个任意类型的数据组成
let po = (x : 12.6, y : 18 ) -----> x y是元素
例:
var point = (x : 10.3, y : 5) /** *获取元组类型中的元素: *point.x point.y * point.0(获取x) point.1(获取y) **/
用let定义一个元组之后,不可以改变其中元素的值
下面语句错误:指定元素类型之后 不能加上元素的名称:
var person:(Int ,String) = (age : 23, name : "ha")
元组中:下划线可以忽略某个元素的值,以便取出其他的元素值
6. 分支语句 循环语句:
for ,while ,do while ,if都与OC中一样
注:这些语句后面必须加{}
1> for in:
for i in 1...4 { // 如果不使用i 可以用下划线_替换i }
2> switch:
在Swift中:switch case后面不需要加break
每一个case与语句后面必须加内容,不能为空的
1》switch多条件匹配:
case0, 1, 2:(满足三个条件中的一个 用逗号分割即可 C语言中多条件表示:case 0: case 1: case 2: --> 比较麻烦 )
2》switch范围匹配:
case 0...3: case 4...10:etc
3》switch匹配元组:
例:一个中心在原点:边长为4的正方形:判断一个点是否在这个矩形框中:
let point = (1, 1) switch point { case (0, 0): // x可以为任意值:x轴点 case (_, 0): // 在矩形框中: case (-2...2, -2...2): }
4》case数值绑定:
可以将switch中的值绑定给一个特定的常量或者变量,以便在case里面的语句中使用这个值
注:fallthrough后面的case语句不能定义变量和常量:例如case let (x, y) where x == y
let point = (10, 0) switch point { // 只要某个点的y值满足为0 就可以走下面的语句,然后获取x的值 可以进行其他的操作 case (let x, 0): // 任意一个点都会走 case let (x, y): }
5》switch中添加where语句:
case let (x, y) where x == y :
6》fallthrough:
作用:执行完当前的case语句,会接着执行fallthrough后面的case或者default语句(相当于C语言中没有加break语句)
7. 加标签:
out : for _ in 1...2 { for _ in 1..3 { print("ha") // break原本只能跳出内层循环 可以通过加标签 跳出外层循环 break out } print("kk") }
8. 函数:
1> 函数定义:
func 函数名(形参列表) -> 返回值类型 {
函数体
}
形参列表:形参名1: 形参类型1, 形参名2:, 形参类型2
无返回值:
func 函数名(形参列表) -> ()
func 函数名(形参列表) -> Void
func 函数名(形参列表)
2> 外部参数名:
使用外部参数名的目的:就是在分不清每个形参的意义时 可以通过外部参数名提示
如下:Age Number就是外部参数名
格式:外部参数名写在形参名前面 用空格隔开
func HA(Age age : Int, Number num : Int) { } // 调用方法: HA(Age: 10, Number: 34)
3> 默认参数值:
在形参前面加#相当于生成一个与当前形参同名的外部参数名
func add(name : String, age : Int = 20){ } // 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名, 调用方法的时候需要将参数名写出 add("haha", age: 32)
在带有默认参数值的形参名前面写一个下划线:_ 在方法调用的时候就不用写外部参数了
func add(name : String, _ age : Int = 20){ } // 存在默认参数的时候,Swift会自动给它生成一个跟形参名相同的外部形参名, 调用方法的时候需要将参数名写出 add("haha", 32)
4> 常量参数和变量参数:
默认情况下,函数的参数都是常量参数, 不能在函数内部修改
如果需要在函数内部对参数进行修改,需定义为var
5> 输入输出函数:
swift中想要修改函数内部局部变量的值,利用输入输出函数
输入输出函数定义:
func swap (inout num1 : Int, inout num2 : Int)
注:不利用第三个变量的前提下,交换两个变量的值:一:异或运算 二:和 差
a. 传递实参的时候,必须在实参的前面加上&
b. 不能传入常量或者字面量(例:12)作为参数值,
c. 输入输出参数不能有默认值 不能使用let var修饰(inout和let var 不能共存)