一. 認識Swift
1.標識符的命名規(guī)則
1. 字母(Unicode字符)、數(shù)字、下劃線,數(shù)字不能開頭
2. 大小寫敏感
3. 不能使用關鍵字做標識符
4. 駝峰標識 - 第一個單詞全小寫以后每個單詞首字母大寫
5. 見名知意
2.終止符
關鍵字 terminator --打印完成后如有其它打印文字不會換行,繼續(xù)打印浙炼。print打印函數(shù)默認打印完成后自動換行
print("Hello, World", terminator: "")
3.字符串插值
關鍵字 (成員變量) 將成員變量值插入字符串中
let a = 10, b = 10
print("\(a) + \(b) = \(a + b)")
//成員變量作除法時的一些特殊情況
let x = 5
let y = 0
print(x / y) // 運行時異常
// 整數(shù)除以0產(chǎn)生運行時異常
// 小數(shù)除以0可能的結果是inf/-inf/nan
// inf - infinity(無窮大)
// nan - not a number(不是一個數(shù))
4.轉(zhuǎn)義字符
轉(zhuǎn)義字符一般全面都會帶一個/赊级。
/n 代表換行符
/t 代表制表符
//print("Hello, World!", terminator: "\n")
//print("大家好", terminator: "\t")
//print("我是制表符")
二.變量和常量
常量關鍵字 let
變量關鍵字 var
Swift具有根據(jù)你的數(shù)據(jù)來判斷類型進行保存的特點(類型推斷)
let m = 10 //不可變的整型變量
var n = 10 //可變整型變量
let m = true //不可變的Bool值
var n = true //可變Boll值的變量
let m = 5.2 // double - 不可變
var n = 5.2 // double - 可變
let m = "Hello World" // String - 不可變
var n = "Hello World" // String - 可變
正常情況下表示整數(shù)首選Int, 表示小數(shù)首選Double
表示字符串首選String, 表示真假首選Bool
元組(tuples)用一個變量或一個常量保存多項數(shù)據(jù)信息的的類型
//方式1
let stu = (1001, "學生1", true, 23)//定義元組
let number = stu.0 // 取出元組中學號
//方式2
let stu : (id: Int, name: String, gender: Bool, age: Int) = (1001, "學生1", true, 23)//定義元組
let name = stu.name // 取出元組中的名字
// 用元組交換兩個變量的值
var x = 5, y = 10
(x, y) = (y, x)
print(x)
print(y)
三.運算符
運算符(運算符兩邊的變量或常量類型必須一致才能做運算)
- 算術運算符: + - * / %
- 關系運算符: == != > >= < <=
- 短路運算符: && ||
//
//算術運算符
var str1 = "Hello"
var str2 = "world"
str1 = str1 + " " + str2 //字符串拼接
print(str1)
//關系運算符
print(str1 > str2)//是一個Bool
//查看字符串的大小 - utf16
var str5 = "王大錘"
for temp in str5.utf16 {//str5.utf16 - 查看字符串大小
print(temp)
}
var str6 = ""
for temp in str6.utf16 {
print(temp)
}
print(str5 < str6)
let year = 2000
let c1 = year % 4 == 0 // 四年一閏
let c2 = year % 100 != 0 // 百年不閏
let c3 = year % 400 == 0 // 四百年又閏
//短路運算符
// && - 短路與運算(而且)
// || - 短路或運算(或者)
if (c1 && c2) || c3 {
print("\(year)年是閏年")
}
else {
print("\(year)年不是閏年")
}
三元運算符
let msg = username == "admin" && password == "123456" ? "登錄成功!!!" : "非法用戶!!!"
//提醒: 三元條件運算的?前面一定要加空格!!!
四.分支結構
1.if語句控制的分支結構
格式
if true {
}
else if ture {
}
else{
}
//優(yōu)先執(zhí)行true陈轿, 如果Bool值為假就往下繼續(xù)判斷吝羞,直到else都為假執(zhí)行else語句
2.switch語句控制的分支結構
格式
switch(num) //num為一個變量用作于判斷
{
//case的值與變量的值做判斷,如果想等執(zhí)行.case的值可以為一個范圍
case 0:
print(num) //如果num等于0,執(zhí)行
case 1:
print(num)
case 2..<5 :
print(num) //如果num的值在大于等于2且小于5的時候,執(zhí)行
default:
print("最后執(zhí)行") //如果前面分支都沒有執(zhí)行,最后會執(zhí)行default
}
五.循環(huán)結構
1.for in 循環(huán)
該循環(huán)可以帶變量也可不帶變量,如果有變量類型只能為Int,每循環(huán)一次變量+=1.
in后面是變量范圍 1...5,代表該變量的值是從1增加到5了讨,循環(huán)5次. 1..<5,代表該變量值從1到4(不包括5),循環(huán)4次捻激。循環(huán)的次數(shù)是由in后面的范圍決定的
for _ in 0...5 {
print("代碼執(zhí)行6次循環(huán),沒有變量")
}
for i in 0..<5 {
print(i) // i - 0 ~ 4
}
2.while循環(huán)
當while后面的值為true時代碼會進入循環(huán),如果為false結束循環(huán)前计。
var i = 1
var judge = true
while judge {
if i = 10 {
judge = false
}
i += 1
print("循環(huán)在繼續(xù)")
}
//當i = 10時, judge為false.等到下次執(zhí)行到while時,不會執(zhí)行循環(huán)內(nèi)的語句.循環(huán)終止
3.repeat while 循環(huán)
repeat while 循環(huán)與while循環(huán)的最大區(qū)別是,他的判斷條件是寫在循環(huán)最后面的,意思就是說每次循環(huán)結束后進行判斷,如果條件為true,繼續(xù)循環(huán).反之,結束循環(huán),執(zhí)行后面的代碼.當?shù)谝淮芜M入循環(huán)時,不論條件真假都會至少執(zhí)行一次循環(huán)內(nèi)的代碼
var judge = false
repeat { //至少執(zhí)行一次循環(huán)
print("正在循環(huán)內(nèi)")
}while judge //該代碼會執(zhí)行一次打印語句
var judge1 = true
var num = 1
repeat { //先執(zhí)行,后判斷
num += 1
if num == 10 {
print("我已經(jīng)循環(huán)了10次啦")
judge1 = false
}
}while judge1
六.數(shù)組
1.swift的數(shù)組有多種定義方法
var numArray :[Int] = [] // 創(chuàng)建一個可變空數(shù)組
var numArray = [Int]() //創(chuàng)建一個可變空數(shù)組
var numArray = [4, 6, 3, 7] //類型判段,你傳入的數(shù)組是什么類型數(shù)組num就為什么類型
var numArray = [Int](count: 10, repeatedValue: 0)) //創(chuàng)建一個可變整型數(shù)組,數(shù)組元素為10個,每個元素的初始值都為0.
2.獲取數(shù)組元素個數(shù)
方法為count
var numArray = [1, 2, 3, 4, 5]
let number = numArray.count
3.遍歷數(shù)組
1.直接遍歷(遍歷出來的值為只讀屬性,不能修改數(shù)組元素的值)
var numArray = [1, 2, 3, 4]
for num in numArray {
print(num) //每次遍歷的num是從數(shù)組中按順序依次遍歷出來的.
}
2.利用元素下標進行遍歷
var numArray = [1, 2, 3, 4, 5]
for index in 0..<numArray.count {
print(numArray[index]) // index代表數(shù)組元素編號,利用編號能夠拿到數(shù)組中每個元素的值
}
3.取到下標及元素值遍歷
var numArray = [1, 2, 3, 4, 5]
for (index, value) in numArray.enumerate() {
print("\(index + 1). value") // index代表元素下標,value代表數(shù)組中該下標對應的值
}
4.增加數(shù)組中的元素
方法名append胞谭, insert
var numArray = [1, 2, 3, 4, 5]
numArray.append(3) // 默認將數(shù)字3添加到數(shù)組中最后一個元素
numArray.insert(2, atIndex:0) // 通過下標控制,可以使添加的元素添加到任意位置
并且swift數(shù)組還可以利用+=運算符進行添加元素
var numArray = [1, 2, 3, 4, 5]
numArray += [2] //默認也是加到數(shù)組中最后一個元素
5.刪除元素
方法名remove
var numArray = [1, 2, 3, 4, 5]
numArray.removeAll(keepCapacity:Bool) //刪除數(shù)組中所以元素如果Bool值是true,不會刪除其空間
numArray.removeFirst(n:Int) //刪除前面n個元素
numArray.removeRange //刪除范圍,需傳入一個范圍
6.數(shù)組的復制
var numArray = [1, 2, 3, 4, 5]
let numArray1 = numArray //全部復制
var numArray2 = numArray[0..3] //輔助一部分
7.數(shù)組做加法
var numArray = [1, 2, 3, 4, 5]
let numArray1 = [1, 2]
let numArray2 = numArray + numArray1
8.數(shù)組排序
方法名sort
var numArray = [1, 2, 3, 4, 5]
let numArray1 = numArray.sort() //返回一個新的數(shù)組且已經(jīng)排好序,默認為升序
numArray.sortInPlace() //在原有數(shù)組上進行排序
9.冒泡法,簡單排序法
1.冒泡法
主要思想是每次進行相鄰元素之間的比較,將較大的數(shù)交換到右邊.單次循環(huán)結束后,最大的數(shù)被移到右邊去.依次循環(huán),達到排序的目的
var numArray = [9, 8, 7, 6, 5, 4, 3, 2, 1]
for i in 1..<numArray.count {
for j in 0..<numArray.count - i {
if numArray[j] > numArray[j + 1]{
(numArray[j], numArray[j + 1]) = (numArray[j + 1], numArray[j]) //交換元素
}
}
}
冒泡法可進行優(yōu)化
var numArray = [9, 8, 7, 6, 5, 4, 3, 2, 1]
for i in 1..<numArray.count {
var judge = false
for j in 0..<numArray.count - i {
if numArray[j] > numArray[j + 1]{
(numArray[j], numArray[j + 1]) = (numArray[j + 1], numArray[j])
judge = true
}
}
if !judge { //當judge為false的時候,表示一次排序都沒有進行.意味著該數(shù)組的順序已經(jīng)排好,不需要再進行排序
break
}
}
2.簡易選擇排序
主要思想是每次選出最小的元素,記錄其下標,將最小的依次與最前面的元素調(diào)換
var numArray = [9, 8, 7, 6, 5, 4, 3, 2, 1]
for i in 0..<numArray.count - 1 {
var index = i //記錄最小數(shù)下標,用于交換
for j in i + 1..<numArray.count {
if numArray[index] > numArray[j]{
index = j //刷新下標
}
}
(numArray[index], numArray[i]) = (numArray[i], numArray[index]) //交換元素
}
10.數(shù)組三大實用方法(閉包)
1.過濾
let array = [23, 37, 96, 55, 40, 92, 68, 88]
let newArray = array.filter{ (a: Int) -> Bool in
return a > 50 // 過濾掉小于50的數(shù)字
}
let newArray1 = array.filter{a in a > 50} // 省略掉括號,return,參數(shù)類型
let newArray2 = array.filter{$0 > 50} //省略參數(shù)
2.映射
let array = [23, 37, 96, 55, 40, 92, 68, 88]
let newArray = array.map{$0 * $0}
3.縮減
let array = [23, 37, 96, 55, 40, 92, 68, 88]
let newArray = array.reduce(0, combine: +) //合并所以值,求和男杈。0為初始值
let newArray = array.reduce(array[0]){$0 > $1 ? $0 : $1} // 輸出最大項,初始值為array[0]