1. 程式人生 > >Swift專欄:Swift基礎入門(一)

Swift專欄:Swift基礎入門(一)

Swift 介紹

簡介

  • Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程式
  • 2014 年,在 Apple WWDC 釋出
    • 幾家歡喜,幾家愁
    • 愁者:只學Object-C的人
    • 歡喜者:之前做過java/python/js語言的人

特點

  • 特點

    • 從它的語法中能看到Objective-C、JavaScript、C#、Python等語言的影子
    • 語法簡單、程式碼簡潔、使用方便
    • 可與Objective-C混合使用(相互呼叫)
    • 提供了類似 Java 的名字空間(namespace)、泛型(generic)、運算物件過載(operator overloading)
  • 為什麼設計Swift語言

    • 讓應用開發更簡單、更快、更穩定
    • 確保最終應用有著更好的質量

歷史

  • 2010 年 7 月,蘋果開發者工具部門總監 Chris Lattner 開始著手 Swift 程式語言的設計工作
  • 用一年時間,完成基本架構
  • Swift 大約歷經 4 年的開發期,2014 年 6 月發表
  • 克里斯·拉特納何許人?
    • LLVM 專案的主要發起人與作者之一
    • Clang 編譯器的作者
    • 蘋果公司『開發者工具』部門的主管
    • 領導Xcode、Instruments和編譯器團隊
    • Swift的大部分基礎架構均由他1人完成
    • 評價:
      • 大神中的大神
      • 牛逼中的牛逼

Swift與Objective-C

  • 是否要從0開始呢?
    • 很多人有個疑惑,新的Swift語言一出,大家都要從開始學語法
    • 現在使用Objective-C的iOS程式設計師 跟 其他行業的非iOS程式設計師站在了同一條起跑線?大家從零開始
  • 個人觀點
    • Swift是一門新的語言,語法難度對每個程式設計師都差不多,從學習Swift的語法角度看,大家是站在同一條起跑線
    • 從使用Swift做iOS開發的角度看,使用Objective-C的老牌iOS程式設計師更佔優勢,因為從Objective-C轉為Swift去做iOS開發,僅僅是書寫的格式變換了,iOS開發的步驟、思想、框架,都沒有改變

現狀

  • 目前有些公司的新專案已經直接採用 Swift 開發
  • 目前很多公司已經在做 Swift 的人才儲備
  • 應聘時,會 Swift 開發 無疑會增加自身籌碼
  • 但是國內大部分公司還在觀望

重要性

  • 蘋果目前在大力推廣Swift
  • 斯坦福大學的公開課目前也是使用Swift在授課.因為以後Swift必將代替OC
  • 題外話:我們同學去面試,面試官問是否會Swift,如果會,我們下個專案直接用Swift來寫.你可以教我們Swift.
  • 個人建議:
    • 先掌握Swift最基本的語法
    • 高階/特殊的功能隨著學習的深入再深入研究
    • 千萬不要浮躁(前面班級經驗)
      • Swift並不難
      • 但是語法和OC區別非常非常大
      • 如果是一個聽一聽,聽不懂就算了的心態.一定是學不好的
      • 如果想要學習,就認真聽講,好好練習

資源網站

  • 一、Swift初體驗

    • Playground是什麼?
      • 從Xcode6開始出現(Swift開始出現)
      • 翻譯為:操場/遊樂場
      • 對於學習Swift基本語法非常方便
        • 所見即所得(快速檢視結果)
        • 語法特性發生改變時,可以快速檢視.
    • Swift最基本的語法變化
      • 匯入框架 import UIKit
      • 定義識別符號時,必須宣告該識別符號是變數還是常量
        • 宣告識別符號的格式:變數/常量關鍵字 名稱 : 資料型別
      • 語句結束時不需要加;
        • 如果同一行有多個語句,則依然需要加
        • 但是不建議一行多條語句
      • Swift中的列印語句:print(列印的內容)

    二、常量&變數

    什麼是常量和變數

    • 在Swift中規定:在定義一個識別符號時必須明確說明該識別符號是一個常量還是變數
    • 使用let來定義常量,定義之後不可以修改
    • 使用var來定義變數,定義之後可以修改

    常量和變數的基本使用

    import UIKit
    
    let a : Int = 10
    // 錯誤寫法,當一個欄位定義為常量時是不可以修改的
    // a = 20
    
    var b : Int = 20
    // 因為b定義為變數,因此是可以修改的
    b = 30

    常量和變數的使用注意:

    • 注意:
      • 是指向的物件不可以再進行修改.但是可以通過指標獲得物件後,修改物件內部的屬性
      • 在真實使用過程中,建議先定義常量,如果需要修改再修改為變數(更加安全)
    // 注意:宣告為常量不可以修改的意思是指標不可以再指向其他物件.但是可以通過指標拿到物件,修改其中的屬性
    // view : UIView = [[UIView alloc] init];
    // Swift物件中不需要*
    var view : UIView = UIView()
    view = UIView()
    
    let view1 : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    view1.backgroundColor = UIColor.redColor()
    
    // 列舉型別的用法:型別.列舉的值
    let btn : UIButton = UIButton(type: UIButtonType.Custom)
    btn.backgroundColor = UIColor.blueColor()
    btn.setTitle("按鈕", forState: UIControlState.Normal)
    btn.frame = CGRect(x: 20, y: 20, width: 60, height: 30)
    view1.addSubview(btn)

    三、Swift中資料型別

    Swift型別的介紹

    • Swift中的資料型別也有:整型/浮點型/物件型別/結構體型別等等
    • 先了解整型和浮點型
    • 整型
      • 有符號
        • Int8 : 有符號8位整型
        • Int16 : 有符號16位整型
        • Int32 : 有符號32位整型
        • Int64 : 有符號64位整型
        • Int : 和平臺相關(預設,相當於OC的NSInteger)
      • 無符號
        • UInt8 : 無符號8位整型
        • UInt16 : 無符號16位整型
        • UInt32 : 無符號32位整型
        • UInt64 : 無符號64位整型
        • UInt : 和平臺相關(常用,相當於OC的NSUInteger)(預設)
    • 浮點型
      • Float : 32位浮點型
      • Double : 64浮點型(預設)
    // 定義一個Int型別的變數m,並且賦值為10
    var m : Int = 10
    // 定義一個Double型別的常量n,並且賦值為3.14
    let n : Double = 3.14


    Swift中的型別推導

    • Swift是強型別的語言
    • Swift中任何一個識別符號都有明確的型別
    • 注意:
      • 如果定義一個識別符號時有直接進行賦值,那麼識別符號後面的型別可以省略.
      • 因為Swift有型別推導,會自動根據後面的賦值來決定前面的識別符號的資料型別
      • 可以通過option+滑鼠左鍵來檢視變數的資料型別
    // 定義變數時沒有指定明確的型別,但是因為賦值給i一個20.20為整型.因此i為整型
    var i = 20
    // 錯誤寫法:如果之後賦值給i一個浮點型數值,則會報錯
    // i = 30.5
    
    // 正確寫法
    var j = 3.33
    j = 6.66

    Swift中基本運算

    • Swift中在進行基本運算時必須保證型別一致,否則會出錯
      • 相同型別之間才可以進行運算
      • 因為Swift中沒有隱式轉換
    • 資料型別的轉化
      • Int型別轉成Double型別:Double(識別符號)
      • Double型別轉成Int型別:Int(識別符號)
    let a = 10
    let b = 3.14
    
    // 錯誤寫法
    // let c = a + b
    // let c = a * b
    
    // 正確寫法
    let c = Double(a) + b
    let d = a + Int(b)

    四、邏輯分支

    一. 分支的介紹

    • 分支即if/switch/三目運算子等判斷語句
    • 通過分支語句可以控制程式的執行流程

    二. if分支語句

    • 和OC中if語句有一定的區別
      • 判斷句可以不加()
      • 在Swift的判斷句中必須有明確的真假
        • 不再有非0即真
        • 必須有明確的Bool值
        • Bool有兩個取值:false/true
    // 演練一:
    let a = 10
    
    // 錯誤寫法:
    //if a {
    //    print("a")
    //}
    
    // 正確寫法
    if a > 9 {
        print(a)
    }
    
    // 演練二:
    let score = 87
    
    if score < 60 {
        print("不及格")
    } else if score <= 70 {
        print("及格")
    } else if score <= 80 {
        print("良好")
    } else if score <= 90 {
        print("優秀")
    } else {
        print("完美")
    }
    
    // 演練三:
    // 這個是可選型別,因為只有宣告成可選型別後,才可以判斷是否為空
    // 可選型別會在後續講解,可先了解即可
    let view : UIView? = UIView()
    
    // 判斷如果view有值,則設定背景
    // 錯誤寫法
    //if view {
    //    view.backgroundColor = UIColor.redColor()
    //}
    
    if view != nil {
        view!.backgroundColor = UIColor.redColor()
    }


    三. 三目運算子

    • Swift 中的 三目 運算保持了和 OC 一致的風格
    var a = 10
    var b = 50
    
    var result = a > b ? a : b
    println(result)

    四.guard的使用

    • guard是Swift2.0新增的語法
    • 它與if語句非常類似,它設計的目的是提高程式的可讀性
    • guard語句必須帶有else語句,它的語法如下:
      • 當條件表示式為true時候跳過else語句中的內容,執行語句組內容
      • 條件表示式為false時候執行else語句中的內容,跳轉語句一般是return、break、continue和throw
    guard 條件表示式 else {
        // 條換語句
        break
    }
    語句組
    • 例子
    var age = 18
    
    func online(age : Int) -> Void {
        guard age >= 18 else {
            print("回家去")
            return
        }
    
        print("可以上網")
    }
    
    online(age)


    四.switch分支

    switch的介紹
    • Switch作為選擇結構中必不可少的語句也被加入到了Swift中
    • 只要有過程式設計經驗的人對Switch語句都不會感到陌生
    • 但蘋果對Switch進行了大大的增強,使其擁有其他語言中沒有的特性
    switch的簡單使用
    • 基本用法和OC用法一致
    • 不同之處:
      • switch後可以不跟()
      • case後可以不跟break(預設會有break)
    • 例子:
    let sex = 0
    
    switch sex {
    case 0 :
        print("男")
    case 1 :
        print("女")
    default :
        print("其他")
    }
    • 簡單使用補充:
      • 一個case判斷中,可以判斷多個值
      • 多個值以,隔開
    let sex = 0
    
    switch sex {
    case 0, 1:
        print("正常人")
    default:
        print("其他")
    }
    • 簡單使用補充:
      • 如果希望出現之前的case穿透,則可以使用關鍵字fallthrough
    let sex = 0
    
    switch sex {
    case 0:
        fallthrough
    case 1:
        print("正常人")
    default:
        print("其他")
    }
    Switch支援多種資料型別
    • 浮點型的switch判斷
    let f = 3.14
    switch f {
    case 3.14:
        print("π")
    default:
        print("not π")
    }
    • 支援字串型別
      • 字串的使用後面會詳細講解
    let m = 5
    let n = 10
    var result = 0
    
    let opration = "+"
    
    switch opration {
        case "+":
            result = m + n
        case "-":
            result = m - n
        case "*":
            result = m * n
        case "/":
            result = m / n
    default:
        result = 0
    }
    
    print(result)
    switch支援區間判斷
    • 什麼是區間?
      • 通常我們指的是數字區間:0~10,100~200
    • swift中的區間常見有兩種
      • 開區間:0..<10 表示:0~9,不包括10
      • 閉區間:0...10 表示:0~10
    let score = 88
    
    switch score {
    case 0..<60:
        print("不及格")
    case 60..<80:
        print("幾個")
    case 80..<90:
        print("良好")
    case 90..<100:
        print("優秀")
    default:
        print("滿分")
    }

    五、迴圈

    迴圈的介紹

    • 在開發中經常會需要迴圈
    • 常見的迴圈有:for/while/do while.
    • 這裡我們只介紹for/while,因為for/while最常見

    for迴圈的寫法

    • 最常規寫法
    // 傳統寫法
    for var i = 0; i < 10; i++ {
        print(i)
    }
    • 區間for迴圈
    for i in 0..<10 {
        print(i)
    }
    
    for i in 0...10 {
        print(i)
    }
    • 特殊寫法
      • 如果在for迴圈中不需要用到下標i
    for _ in 0..<10 {
        print("hello")
    }

    while和do while迴圈

    • while迴圈
      • while的判斷句必須有正確的真假,沒有非0即真
      • while後面的()可以省略
    var a = 0
    while a < 10 {
        a++
    }
    • do while迴圈
      • 使用repeat關鍵字來代替了do
    let b = 0
    repeat {
        print(b)
        b++
    } while b < 20