Swift基礎文法學習總結,swift基礎文法
1.基礎
1.1) swift還是使用// 和/* */ 來注釋,並且/* */允許多行注釋.
1.2) swift使用print和println列印,它的傳參是一個泛型,幾乎所有類型都是可列印的.
1.3) swift在語句後面加分號與否都是正確的,但是swift偏好的風格是不在結尾處加分號的.如果有多個語句,必須用分號隔開.
1.4) 在一個數字中庸底線(_)會被忽視,方便認出大數值的的數字,也可以在前面補零.
1.5) swift不允許在不同種類型間做加減乘除,要先做類型轉換或運算子多載.
1.6) typealias 可以為一個類型指定另外一個名字,這樣可以清晰的表達類型的意義.typealias newType = OldTypeName
1.7) assert 斷言表示自己拋出異常,assert 第一個參數表示 通過而不拋異常的條件,第二個參數表示提示,第二個參數可以沒有
1.8) swift中的 = 賦值運算子沒有傳回值,所以不會犯 if a = 3 {}這樣的錯誤了,運算子前後加空格,以免xcode不能識別
2.變數
2.1) let 定義常量,var 定義變數,let定義的必須在聲明時指定初始值,普通的var聲明也必須賦初始值.
2.2) let 聲明的變數不可再改變,而var變數可以再改變,但是你不能再聲明一個已經聲明的常量或變數.
2.3) 可以在一行同時聲明多個常量或變數,用逗號隔開;如果每個常量對應一個var或let只需要用分號隔開即可.
2.4) 每個常量和變數都一定會有固定的類型,如果沒有指定類型,swift會根據後面的賦實值型別來推斷.
2.5) swift的命名不能使用保留字和箭頭/開頭不能用數字,沒有其它任何規定,甚至都可以使用小狗小貓命名.
2.6) 如果你想使用關鍵字來命名是不允許的,但是你可以在前後加上``來命名,比如`let`,非關鍵字加``命名也可以的.
2.7) swift裡可以聲明元組,類型類似於(Int, String),你可以用var聲明也可以用let聲明,裡面兩個都會是變數或者常量
2.8) 而元組的方式和直接分開聲明兩個變數和常量沒多大區別,你可以把其中的變數拿出來單獨用或當元組用,混合用也可以.
2.9) 可以用元組名直接通過下標索引直接來訪問元組裡對應的值,比如aaa.0 aaa.1
2.10) 你可以在元組中跟元素命名,比如(code:404,message:"Not Found"),然後你就可以用aaa.code 和 aaa.message來訪問
3.類型
3.1) int型的UInt8和Int32 都可以通過min和max來取最大值和最小值
3.2) Double是64位浮點數,Float是32位浮點數,對小數自動推斷是Double類型,除非是指定過類型的
3.3) 可以跟指定為浮點類型的常量或變數賦一個整數值但是不能是整數變數,它會自動轉換成浮點數.
3.4) 顯示指定類型的變數或常量不能跟它賦值一個不同類型的值,它不能做自動轉換,除了跟浮點類型賦值一個整數數值
3.5) 在指定類型後加一個?表示可選類型,它的意思是它可能為沒有值為nil,然後你可以通過可選綁定或者判斷是否為空白來使用它.
3.6) 如果是一個class的可選類型,你可以通過.?訪問它的屬性和方法,它是通過前者是否會相應後面的方法,如果能響應則執行,不能則返回nil
3.7) ?其實是個文法糖,比如String?類型等價於Optional<String>類型,只是方便寫而已,他和String類型本質是不同的
3.8) 如果你不想用判斷是否為空白或者用可選綁定或者用.?來訪問它,你可以用最直接最簡單的!強制解包來使用,但前提是能保證非空
3.9) 如果一個可選量沒有值又強制解包會報錯,一個可選類型會隱式賦值為nil,你也可以在使用中賦值為nil
3.10) 之所以需要有可選類型是因為swift是類型絕對安全的語言,它需要你在使用變數時一定有值,但是這種可選類型太麻煩,所以產生了!類型,!類型本質應該就是可選類型
3.11) 聲明為!可選類型,也可以不做初始化,它相當於你在每次使用可選類型的時候加上了!進行強制解包,你就不需要再自己加!了,你需要自己保證它不為空白,否則使用會出錯
4.字串
4.1) ... 表示閉區間/ ..< 表示開區間, == 表示值相等/=== 表示引用相同, + 可以直接加字串或數組
4.2) swift中的string是實值型別,它在做常量變數賦值或函數中進行傳遞時都會做值拷貝,都是一個新的副本,swift只有在必要的情況下做拷貝
4.3) 可以用for in 遍曆字串,用 count全域Function Compute字元數,用isEmpty屬性判斷是否是Null 字元串,有hasPrefix判斷首碼(尾碼等)
4.4) 可以用startIndex和endIndex擷取開始和結束下標,用數組和下標的形式訪問單個字元;還可以通過\()的方式產生字串
5.數組
5.1) swift中的數組可以用[String]和Array<String>來聲明,它們是同一個意思,賦值也直接用中括弧[]表示就可以了,裡面的值需要是同一個類型
5.2) array 有count/isEmpty等屬性,有append/insert/remove等方法,它可以直接 + 一個數組,它可以通過下標和下標區間來取值,區間取到的是一個數組
5.3) for item in shoppingList / for (index, value) in enumerate(shoppingList) 兩種遍曆方式,後面一種會知道下標
5.4) 可以通過[Double](count: 3, repeatedValue: 3.3) / Array(count: 3, repeatedValue: 2.5) 初始化一個數組
5.5) 數組也是值傳遞,如果把數組a賦值給數組b,a和b就是兩份拷貝,修改相互不會有影響
6.字典
6.1) 字典是通過 [String : String] / Dictionary<String, String> 聲明的,形式也是用[a:b,c:d]這種形式,通過鍵訪問值
6.2) 可以直接通過a[b] = c 這種方式增加一個索引值對,通過updateValue和removeValueForKey來增加刪除索引值對
6.3) 可以用for (airportCode, airportName) in airports / for airportCode in airports.keys 遍曆索引值對或鍵或值
6.4) 可以直接賦值 [:] 來清空字典,索引值是可以為Int的;和string,array一樣,dictionary也是值拷貝
7.Set
7.1) 用Set<Int> 聲明Set,和數組一模一樣跟它賦值,也可以通過賦值[]清除,也必須是同一類型,也有insert/contains方法,isEmpty屬性
7.2) Set也有for in 遍曆,有取兩個集合的差交等做做排列的方法,也有判斷子集超集等方法
8.For迴圈
8.1) for index in 1...5 的這個index只是在當前這個迴圈的範圍內,如果for迴圈外面也有一個index,隨便修改也不會和它又什麼影響
8.2) for _ in 1...10 如果不需要迴圈的這個索引可以用底線_代替,在swift中只要不需要那個值的一般都可以用_代替
8.3) for var index = 0; index < 3; ++index 這種for迴圈也還是可以的
9.Switch語句
9.1) swift 中的switch必須窮舉所有的可能,否則必須加default,窮舉的時候在一個case後面可以放很多可能值,用逗號隔開就好
9.2) 窮舉可以是用...和..<表示的一個區間,對於元組可以一個用_萬用字元,另一個匹配,或者兩個都匹配,或者兩個都是區間(只有一個元素也可以做值綁定)
9.3) 做統配的時候可以用var x/let x,或 let (x,y) 進行值綁定,其中var聲明的可以修改
9.4) 當做let 做值綁定的時候可以在後面加上 where做條件判斷.switch 不需要用break防止穿透,但是它還是會去下一個case判斷條件去匹配,使用break還是可以直接跳出switch
9.5) 在switch同樣可以使用break/continue跳出一個標籤