swift3.0變化總結

來源:互聯網
上載者:User

標籤:通過   imp   預設   elf   資料類型   tle   now()   c語言   簡潔   

Swift 3.0 做出的改變很大,在這篇文章中,我將盡我所能,利用代碼範例給大家解釋Swift 3.0最重要(要命)的改變,希望大家能夠做好升級Swift 3.0 的準備。Swift 3.0的改變不僅僅是我下面的這個列表,但是列表中的每一項都是對你的一個巨大的打擊。

雖然Swift 3.0 仍處於開發階段。Swift 3.0 會有很多很多的變化,其中一些可能會在細微之處。然而,我們希望這些變化是一次性的。為了使Swift可以在未來幾年更好的發展,在以後的版本更新中改變應該的顯著變小。一些Swift 2.3的東西已經過時了,並且被刪除了。這包括++,--,C風格的for迴圈,元組文法等等。但不得不說3.0之後的swift變得更加簡潔。

  • 關於Bool屬性:所有的BOOL類型都重新命名為isXXX,所以以後我們的自訂類中BOOL屬性的命名也應體現這個規則

     2.3寫法:btn.hidden = false

     3.0寫法:btn.isHidden = false

  • Foundation架構部分類名去掉NS首碼

    像UserDefaults、URL、NotificationCenter、Bundle、Timer、Thread、RunLoop等

    

  • 常用系統提供單例類的擷取方法Swift風格化

    

  • 常用結構體的構造方法改變

    

    Swift2.3中,使用構造方法和make函數都可以建立;

// Make函數建立 let size = CGSizeMake(10, 20)
// 構造方法建立 let _ = CGSize(width: 10, height: 20)

  Swift3.0中,廢棄make函數,只能使用構造方法建立 

// 只能使用構造方法建立let _ = CGSize(width: 10, height: 20)
  • 通知的變化

   Swift 3.0 中NSNotification和Notification建立時,通知的name參數類型都變為“Notification.Name”類型,該類型建立比較複雜。

// Swift3.0中的通知let _ = NSNotification(name: NSNotification.Name(rawValue: "name"), object: nil)
  • UIViewController 返回是否顯示狀態列的方法變化

   狀態列顯示由方法func變為var屬性

  • 擷取string的字串長度方法的改變

  • 擷取沙箱指定檔案夾路徑的方法變化

    擷取檔案路徑統一交給FileManager來管理

  • GCD文法的改變

   順延強制的代碼轉換的不夠好。應該這樣寫:

// 順延強制代碼DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) { print("明明")}
Swfit的關鍵字的變化
  • private和fileprivate

        private: 私人屬性和方法,僅在當前類中可以訪問,不包括分類;

        fileprivate: 檔案內私人屬性和方法,僅在當前檔案中可以訪問,包括同一個檔案中不同的類。

// 只能在當前大括弧內訪問  private func privatePractise() { value = 1 fileprivatePractise() print("privatePractise方法被調用了") } // 只能在當前檔案內訪問 fileprivate func fileprivatePractise() { privatePractise() print("fileprivatePractise方法被調用了") }
  • public和open

     在Swift2.3中,pubic有兩層含義:

     這個元素可以在其他範圍被訪問

     這個元素可以在其他範圍被繼承或者override

     繼承是一件危險的事情。尤其對於一個framework或者module的設計者而言。在自身的module內,類或者屬性對於作者而言是清晰的,能否被繼承或者override都是可控的。但是對於使用它的人,作者有時會希望傳達出這個類或者屬性不應該被繼承或者修改。這個對應的就是 final。

final的問題在於在標記之後,在任何地方都不能override。而對於lib的設計者而言,希望得到的是在module內可以被override,在被import到其他地方後其他使用者使用的時候不能被override。

這就是 open產生的初衷。通過open和public標記區別一個元素在其他module中是只能被訪問還是可以被override。

    在Swift3.0中

    public表示當前類、屬性或者方法只能在當前module內被繼承或者override,在當前module意外只能被訪問;

    open表示當前類、屬性或者方法可以在任何地方被繼承或者override;

    final是一個輔助修飾詞,表示當前類、屬性或者方法在任何地方都只能被訪問,不能被繼承或者override;

    internal表示預設層級。

 Swfit3.0中,存取控制許可權由高到低依次為:open、public、internal(預設)、fileprivate,private。
  • if…where和guard…where的變化
在Swift2.3中
// Swift2.3var value: Int?var num: Int?if let v = value, n = num where v > n { print("value > num")}value = 1num = 2guard let v = value, n = num where v > n else { print("value < num") return}

  在Swift3.0中

// Swift3.0var value: Int?var num: Int?if let v = value, let n = num, v > n { print("value > num")}value = 1num = 2guard let v = value, let n = num, v > n else { print("value < num") return}


  • 方法名的變化

     在Swift的方法命名規則中,參數有兩個名稱,一個內部名,一個外部名。當參數有外部名時,方法調用時只顯示外部名,若無外部名,則預設外部名和內部名相同。建議以後自訂方法時,風格盡量和Swift3.0保持一致。

在Swift3.0 編譯器環境下兩種風格對比:

  • selecter的變化

    在Swift2.2中,當我們為一個按鈕添加點擊事件時常常這樣寫:

    btn.addTarget(self, action:"click", forControlEvents: .TouchUpInside)

    在Swift3.0中兩種寫法依然都可以使用,但建議寫成下面格式:

    btn.addTarget(self, action:#selector(ViewController.click), for: .touchUpInside)

  • 運算子的變化
  1. Swift3.0中運算子的左右兩邊必須不能為optional
  2. ++和--是繼承自C語言中的運算子,在Swift3.0中被移除,建議使用  += 1/ -= 1來代替
  • 方法,枚舉等命名變化  

    對於枚舉和屬性,駝峰大寫首碼被替換成了駝峰小寫首碼

    比如說CGColor或CIColor。是的,現在它將會變成cgColor和ciColor。

    let red = UIColor.red().cgColor

    這種變化確實提高了編碼的一致性:所有的屬性和參數應該都是以小寫開始,沒有例外!

    同時,枚舉也在發生著改變,從駝峰大寫首碼改為駝峰小寫首碼。這意味著:枚舉是一個資料類型,但是枚舉值更接近屬性。然而,這意味著蘋果的枚舉現在都是小寫了。 

NSTextAlignment.Left// old

NSTextAlignment.left// new

 

swift3.0變化總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.