如下沒事刷一刷,尤爲是剛開始不熟悉的時候,等後面熟悉了 就直接根據大量寫的項目 若是用oc寫和用swift寫有啥不一樣,能夠本身來自由發揮了:html
<1>.Swift 和 OC 的不一樣編程
1.Swift 基於C 和 OC ,但沒有C的一些兼容約束,添加了一些新功能,讓編程變得簡單,靈活,有趣。 2.它融合了不少現代編程語言的優勢,諸如閉包這樣的高級語言特性(我的理解:閉包不是oc也有block麼,不太高階函數倒沒有)。 3.在語法結構上簡潔優雅,有點像JS。 4.對LLVM編譯器速度有所優化,swift進行開發 編譯快 (暫時沒感受到,之前混編一直編譯慢,爲何呢?) 5.Swift是開源,將來的趨勢。更多不一樣可沒事刷刷: https://www.kingwins.com.cn/content-3213.html ,以及更多最新的資料訊息。 6. Playground 能夠在學習語言時,不用編譯運行,省去了編譯運行的耗時,寫的過程當中實時顯示運行結果(第一次的時候能夠會慢些)。提升了學習效率。
<2>.語法上的細節及要學習的點:swift
基礎不一樣: 1.命名:swift的字母採用的是 Unicode 編碼,因此咱們能夠用中文等亞洲文字進行命名,表情也能夠。 2.let和var來定義 常量和變量,Swift開發原則是儘可能使用常量,由於常量的運行效率更高。若是你聲明的變量沒有在代碼裏發生改變,那麼編譯器會提示你把變量修改爲常量。 3.不用在後面寫 ; 分號。 4.類型推測。不用指定聲明對象的類型,會根據賦值來推導肯定它的類型。 swift是一門強類型語言(具體強類型弱類型的概念我仍是有點迷糊,稍後補充吧),類型安全,編譯期檢查全部的類型。 5.swift採用字符串插值的方式在輸出的內容加入常量或變量,將變量名放在 \()括號中。 工程項目中儘可能不要寫 print ,養成打斷點的好習慣,由於這些print對用戶而言是沒有意義的,並且每次編譯運行打印都會消耗時間成本。 6.swift裏的布爾值,不接受 0 表明 false , 1表明 true的用法。也沒有yes和no。 7.<重點> 元組(數組的組字): 元祖相似一個,能夠放不一樣類型的數組。好比 let message = (「小明」,9,」三年二班」). 能夠經過索引獲取了 message.0 ,獲取 小明。 也能夠用成員變量命名,好比 : let message = (name:」小明」,age:9,grade:」三年二班」) 能夠經過名稱調用: message.name
還有一種玩法就是,若是想要獲取元祖中的某些重要部分加以利用,忽略一些不重要的信息時,能夠把元祖的值傳遞到一個新元祖中,例子: let message = (name:」小明」,age:9,grade:」三年二班」), let (showName,,) = message . 而後打印 showName 就僅僅輸出的是 小明這樣的重要信息了。數組
8.<重點>可選型。 用於某些不肯定是否有值的狀況,其有兩個返回值:具體的值和nil,nil表示空值。定義可選型只須要在常規類型後面加一個問號 ? 便可。
例如:var age:Int ? . 這樣age就被定義成了一個可選型,若是它有值就必定會返回一個Int類型的值,不然返回nil。 經常用於搜索和轉型方法的返回值類型,由於這兩種常常會出現失敗的狀況。好比 var age:Int ? 結果是 nil . 而後從 age = Int(「12」) 結果是 12 , age = Int(「小明」) 結果是 nil . Swift 中的類和結構體在初始化時其內部的全部屬性必須被初始化,不然沒法經過編譯,這也是出於安全性的考慮。把一個變量定義爲可選型,在沒有賦值狀況下它會被默認賦值爲 nil. <重點>對可選類型解包: 1.當咱們肯定一個可選型的值不爲nil的時候,可使用解包獲取其中的值。它的表現形式很簡單,在須要解包的變量名後面加一個 ! 感嘆號,就能夠解包。可是若是你忘了對變量賦值卻又使用了 ! 號 ,程序在解包的時候就會崩潰。 2.再把可選型轉非可選型的賦值語句中常常用到 「??」 操做符,兩個問號以前爲一個可選型,以後爲一個費可選型,?? 操做符自帶解包功能,例子: Var age:Int , Age = Int(「12」) ?? -1 。 結果是 12 . 轉型成功。 Age = Int(「小明」) ?? -1 。結果是 -1 . 轉型失敗。 3.<重點之重點> 相比於強制解包,swift 提供了一種更安全的解包方式:可選綁定。 可選綁定有兩種格式可選: if - let 和 guard - let - else . 例子1: if - let 結構:安全
Var age:Int ? = Int(「12」) If let a = age { print(a) } 相似於 if 語句,當 age 不爲空的時候,對 age 進行解包並給其一個 別名 a . 而後執行花括號裏的內容。若是age爲nil,那麼大括號中的代碼不會執行。使用可選解包程序不會崩潰。閉包
例子2:guard - let -else 格式 (swift2.2引入):編程語言
Guard let a = age else { return //終止方法 } print(a) //在外部使用解包後的值。不一樣於if-let的是 ,它首先處理age爲nil的狀況,在此種狀況中必須在花括號對中使用return 或者 break提早終止代碼。於if-let結構相同的是,若是age有值會被保存在別名a裏,不一樣的是無論有多少個 guard - let -else ,別名 a的做用域都在最外層,有效避免了過於深刻的嵌套。函數
9.賦值運算符 = 號,swift爲了不發生 兩個等號判斷寫成了一個等號變成了賦值,這樣的寫法系統會直接提示錯誤:
If x = y {. }學習
10.swift的 + 號,除了基礎的運算 還能夠直接用來拼接字符串,整數和浮點數作加法。 % 能夠對浮點數求餘,這都是oc不具有的。 11.swift 3.0之後沒有 ++ 和 — 這樣的運算符,自增和自減用 : a += 1 , a -= 1. (至關於 a = a + 1)這樣的寫法能夠指定「步長」。 12. == 在 swift 裏能夠比較任何類型,不用像oc等語法那樣使用不一樣的 isEqual方法。其餘c中的比較運算符 swift均可以用。 13.接下來講 三元運算符, 判斷條件 ? 爲真時的操做 : 爲假時的操做。例子: var 名字 = 180 < 160 ? 「小明」 : 「小剛」 . 14.範圍<重點>. 例子: 1…5 表示閉區間 [1,5] ,也就是從 1 到 5 的範圍。 1..<表示半閉區間 [1,5),也就是從 1 到 4。 常常在for循環語句使用 for index in 1…5 { println(index)}. switch 裏使用 : case 1…2: print (「Hello」 ) 15.字符串與字符(待補充,下節看點)