Swift與OC的不同

weixin_34321977發表於2017-03-01

寫在前面

以前做iOS的專案一直使用OC開發,最近做專案時使用了Swift。但是被別人問及

  1. 為什麼使用Swift做專案?
  2. Swift與OC相比有什麼區別?或者有什麼優勢?
    ...
    我先是一臉懵逼,因為自己確實沒有細細比較過Swift與OC的區別,或者Swift語言到底有什麼優勢。靜下心來想想,自己使用Swift開發專案的最初原因,無非是想證明自己已經掌握了一門新的開發語言,而且,這門語言已經很成熟。
    真要說說Swift與OC的區別,那就先從語法開始總結吧!

Swift與OC語法上的區別

常量和變數
  1. Swift常量使用let宣告;變數使用var宣告
  2. Swift對常量和變數有型別推斷的機制
  3. Swift對變數新增了可選型別,可選即表示這個變數要麼有值,要麼為nil
函式
  1. Swift一行程式碼不用寫分號
  2. Swift的返回值可以使用元組返回多個值
  3. Swift的函式引數可以設定預設值
  4. Swift的函式引數有內外標籤
  5. Swift的函式可以巢狀函式
  6. Swift子類覆蓋父類的方法必須使用關鍵字override
關鍵字、保留字、資料型別
  1. nil:OC中nil只能修飾NSObject及其子類物件,表示OC物件指標為空;Swift中nil可以修飾所有型別,包括基礎資料型別,表示值缺失
  2. switch:1. Swift中switch語句的值可以是字串等值 2.Swift中switch不用break,如果想實現幾個值貫穿可以使用關鍵字fallthrough
  3. 陣列:Swift的資料可以儲存基礎型別資料;NSArray只能使用NSNumber儲存基礎資料型別資料
  4. 布林型別:Swift的Bool型別true才為真;OC裡BOOL型別非0即為真
  5. 取餘:Swift可以對浮點型資料取餘(Swift3.0後使用函式對浮點型資料取餘;%與OC中保持一致)
  6. Swift中對變數取別名使用typealias;OC中使用typedef
Swift新增關鍵字、運算子
  1. 範圍運算子:
    a...b表示[a, b],及a<= value <=b
    a..<b表示[a, b),及a<= value <b
  2. 元組

現在先總結這麼多,後續更新。如果有什麼遺漏的語法不同點,歡迎大家提出~

相關文章