您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

Swift 2.2 的新特性介紹

大?。?/span>0.7 MB 人氣: 2017-10-11 需要積分:1
導(dǎo)讀:本文來(lái)自SwiftGG翻譯組,作者@walkingway基于蘋(píng)果Swift官方博客中Ted Kremenek所撰寫(xiě)的“Swift 2.2 Released!”文章進(jìn)行了關(guān)于Swift 2.2新特性的介紹翻譯以及小試牛刀,Swift 2.2雖然是個(gè)小版本,但也有許多值得開(kāi)發(fā)者注意的內(nèi)容。
  Swift 2.2 隨著 iOS 9.3 一同閃亮登場(chǎng),相較于 Swift 2.1, 2.2 版本做出了許多調(diào)整,從其調(diào)整方向上我們也能一窺 Swift 3.0 的影子,以下內(nèi)容主要來(lái)自于蘋(píng)果 Swift 官方 Blog,接下來(lái)就讓我們進(jìn)入正題,一睹 Swift 2.2 的廬山真面目:
  允許更多的關(guān)鍵字來(lái)做參數(shù)標(biāo)簽
  SE-0001: Allow (most) keywords as argument labels
  參數(shù)標(biāo)簽是 Swift 中非常 cool 的一個(gè)特性,我們可以這么寫(xiě):
  fori in1.stride(to: 9, by: 2) { print(i) }
  這個(gè)函數(shù)很簡(jiǎn)單,由 1 開(kāi)始,每次加 2,返回一系列的值,最后的結(jié)果要小于 9:
  1 3 5 7
  上面的函數(shù)如果參數(shù)前沒(méi)有 to 或 by 標(biāo)簽,即 stride(9, 2) 那么代碼將失去自解釋性,別人也很難猜到這些參數(shù)的實(shí)際用途。
  又假設(shè)我們要獲取集合中某個(gè)值對(duì)應(yīng)的索引,可以聲明如下方法:
  indexOf(value, in: collection)
  但是注意在 Swift 2.2 之前的版本,上面這種寫(xiě)法 Xcode 會(huì)報(bào)錯(cuò),因?yàn)?in 是一個(gè)關(guān)鍵字,想要使用這些關(guān)鍵字必須加上單引號(hào):
  indexOf(value, `in`: collection)
  以前我們定義新的 API 的時(shí)候,通常也要避免與這些關(guān)鍵字撞車(chē),比如用 within 代替 in。在我們導(dǎo)入 Objective-C APIs 的時(shí)候通常會(huì)碰到這些問(wèn)題:
  event.touchesMatching([.Began, .Moved], `in`: view) NSXPCInterface(`protocol`: SomeProtocolType.Protocol)
  而在 Swift 2.2,我們開(kāi)放了除 inout, var 和 let 以外所有的關(guān)鍵字,現(xiàn)在他們都可以作為參數(shù) label 來(lái)使用了(而不用加單引號(hào))關(guān)于語(yǔ)法的影響主要注意以下三方面:
  1、函數(shù)調(diào)用中的關(guān)鍵字可以隨意使用了,不會(huì)產(chǎn)生什么歧義,因?yàn)榉椒ㄕ{(diào)用時(shí) “:” 總是伴隨著參數(shù)標(biāo)簽出現(xiàn)。
  2、函數(shù)/子類化/初始化 聲明:除 inout, var 和 let 這三個(gè)關(guān)鍵字之外,使用其他關(guān)鍵字沒(méi)有什么歧義,因?yàn)檫@些關(guān)鍵字后面總是跟隨著 ‘:’ 或 ‘_’ 比如:
  func touchesMatching(phase: NSTouchPhase, inview: NSView?)-》Set《NSTouch》
  假如你想在函數(shù)聲明中使用 inout, var 和 let 做為參數(shù)名的話,還是要加單引號(hào):
  func addParameter(name: String, `inout`: Bool)
  3、如果在函數(shù)類型中這三個(gè)關(guān)鍵字(inout,var,let)出現(xiàn)的話,是不需要加單引號(hào)的,這是因?yàn)樵谶@種情況下參數(shù)名后總是跟著 ‘:’
  (NSTouchPhase, in: NSView?)-》Set《NSTouch》 (String, inout: Bool)-》Void
  元組對(duì)象可以進(jìn)行比較操作了
  SE-0015: Tuple comparison operators
  元組是以逗號(hào)分割的值列表:
  letdeveloper = (“Numbbbbb”, “Shanks”) letdesigner = (“Cee”, “Sai”)
  以前想要比較兩個(gè)元組,我們需要自己重載操作符
  func == (t1: (T, T), t2: (T, T))-》Bool { returnt1.0== t2.0&& t1.1== t2.1}
  拋開(kāi)每次都要寫(xiě)這一坨無(wú)趣的代碼不說(shuō),而且只能比較包含兩個(gè)元素的元組。不過(guò)在 Swift 2.2 中,我們可以直接比較兩個(gè)元組了:
  letdeveloper = (“Numbbbbb”, “Shanks”) letdesigner = (“Cee”, “Sai”) ifdeveloper == designer { print(“Matching tuples!”) } else{ print(“Non-matching tuples!”) }
  Swift 2.2 允許不超過(guò) 6 個(gè)元素的元組之間進(jìn)行比較,限制元組的元素個(gè)數(shù)主要有兩個(gè)原因:
  每一次比較都需要在基本庫(kù)中添加額外的代碼;元組的元素過(guò)多并不是一種好的編程風(fēng)格,考慮用結(jié)構(gòu)體代替。
  可以嘗試下面兩個(gè)元組比較:
  letdeveloper = (“Numbbbbb”, 23) letdesigner = (“Cee”, “Sai”)
  不出意外地報(bào)錯(cuò)了:
  Swift 2.2 的新特性介紹
Swift 2.2 的新特性介紹

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

Swift 2.2 的新特性介紹下載

相關(guān)電子資料下載

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?