swift 2.2 相較于swift 2.1以及它之前的一些變化

這些變化來(lái)自蘋(píng)果官方的喉脖,因?yàn)橛⒄Z(yǔ)水平有限亚隙,翻譯的只是個(gè)大概箫攀,想深入了解的肠牲,可以訪問(wèn)這個(gè)地址:https://swift.org/blog/swift-2-2-new-features/ 那么廢話不多說(shuō),下面來(lái)些硬貨靴跛。

1.編譯時(shí)selector的變化缀雳,swift 2.1的時(shí)候,像下面所示的代碼不會(huì)報(bào)出任何的錯(cuò)誤

    override func viewDidLoad() {      
            super.viewDidLoad() 
            navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self,action: "addNewFireflyRefernce")
    } 
    func addNewFireflyReference() { 
            gratuitousReferences.append("We should start dealing in black-market beagles.")
    }

swift 2.2 中汤求,這樣的定義就會(huì)報(bào)錯(cuò)俏险。在這里严拒,swift 2.2 作出改變的原因扬绪,似乎是官方認(rèn)定,這樣定義一個(gè)字符串使字符串和定義的方法缺乏一種關(guān)聯(lián)性裤唠。那么swift 2.2中的代碼示例如下

    override func viewDidLoad() {
          super.viewDidLoad()
          navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self,action: #selector(addNewFireflyRefernce))
    }
    func addNewFireflyReference() { 
           gratuitousReferences.append("Curse your sudden but inevitable betrayal!")
    }

2.更多的關(guān)鍵字作為函數(shù)的外部參數(shù)名挤牛,swift 2.2 之前,當(dāng)你用到關(guān)鍵字作為參數(shù)名的時(shí)候种蘸,你只能這樣定義:

    func visitCity(name: String, `in` state: String) {
          print("I'm going to visit \(name) in \(state)")
    }
    visitCity("Nashville", `in`: "Tennessee")

在swift 2.2 中墓赴,除了inout竞膳,var,let 之外的任何一個(gè)關(guān)鍵字都可以被用作參數(shù)名诫硕,如果在之前的swift項(xiàng)目中坦辟,你使用了這種倒引號(hào)的語(yǔ)法,那么章办,很抱歉锉走,你必須移除它們。現(xiàn)在的話藕届,像下面這樣的代碼是被允許的:

    func visitCity(name: String, in state: String) {   
          print("I'm going to visit \(name) in \(state)")
    }
    visitCity("Nashville", in: "Tennessee")`

3.元組的比較被加入操作挪蹭。在swift 語(yǔ)言中,元組是一種至關(guān)重要的語(yǔ)言休偶,至少函數(shù)的多返回值的實(shí)現(xiàn)依賴于它梁厉。在swift 2.2給出了比較兩個(gè)元組相等的能力。這也意味著它將會(huì)拿一個(gè)元組的每一個(gè)元素和另一個(gè)元組的每一個(gè)元素進(jìn)行對(duì)比踏兜,如果所有的元素都能匹配上词顾,那么將返回true。例如碱妆,下面的代碼將會(huì)打印NO Match:

    let singer = (first: "Taylor", last: "Swift")
    let alien = (first: "Justin", last: "Bieber")
    if singer == alien { 
         print("They match! That explains why you never see them together…")
    } else {
         print("No match.")
    }

swift 2.2中计技,只要元組的元素個(gè)數(shù)不超過(guò)6個(gè),元組的比較就能正常的工作山橄。

一個(gè)警告:當(dāng)比較兩個(gè)元組相等的時(shí)候垮媒,它會(huì)忽略元組中元素的名字相等,所以下面的代碼中航棱,singer 和 bird 這兩個(gè)元組是會(huì)被認(rèn)為是相等的:

  let singer = (first: "Taylor", last: "Swift")
  let bird = (name: "Taylor", breed: "Swift")
  if singer == bird {   
      print("This explains why she sings so well.")
  } else {    
      print("No match.")
  }

4.元組表示的語(yǔ)法將會(huì)過(guò)時(shí)睡雇。在和元組表示語(yǔ)法待了不長(zhǎng)的時(shí)間之后,swift 2.2 反對(duì)這一極少被使用的特性饮醇。我在這里提起它只是因?yàn)樗羞@一個(gè)不可思議的名字它抱。在swift 2.1 或者更早的時(shí)候,去使用一個(gè)小心制作的元組來(lái)填充函數(shù)的參數(shù)是可能的朴艰。所以观蓄,假如你有一個(gè)擁有兩個(gè)參數(shù)的函數(shù),那么你便可以用一個(gè)具有2個(gè)滿足函數(shù)參數(shù)類型的元素的元組來(lái)作為參數(shù)調(diào)用函數(shù)祠墅。例如:

  func describePerson(name: String, age: Int) {
      print("\(name) is \(age) years old")
  }
  let person = ("Malcolm Reynolds", age: 49)describePerson(person)

5.C語(yǔ)言風(fēng)格的循環(huán)語(yǔ)句將會(huì)過(guò)時(shí)侮穿。盡管swift 擁有一些慣用的循環(huán)方式的選擇,C語(yǔ)言風(fēng)格的循環(huán)方式卻一直是語(yǔ)言的一部分并且被常常使用毁嗦,例如:

  for var i = 0; i < 10; i++ {
      print(i)
  }

這種方式在swift 2.2將會(huì)被反對(duì)并且將會(huì)在swift 3.0中被徹底的移除亲茅。這也朝著再也不用打一個(gè)分號(hào)(;)又邁出了一步

如果你有使用Xcode,你必須把你C語(yǔ)言風(fēng)格的循環(huán)轉(zhuǎn)換為現(xiàn)代的swift的形式。在之前的swift中克锣,會(huì)使用如下所示的范圍的方式來(lái)進(jìn)行循環(huán):

  for i in 0 ..< 10 {
      print(i)
  }

然而茵肃,這種方式的能力是極其有限的,所以我們不得不自己做一些工作袭祟,例如验残,下面的兩個(gè)例子就是上面的轉(zhuǎn)變方式所不能解決的情況:

  for var i = 10; i > 0; i-- {
      print(i)
  }
  for var i = 0; i < 10; i += 2 {
      print(i)
  }

在第一種情況中,你需要使用(1...10).reverse來(lái)創(chuàng)建一個(gè)降序的范圍巾乳。這和你使用10...1的方式是不同的胚膊,倘若你使用上述的方式的話,程序在編譯的時(shí)候?qū)?huì)崩潰想鹰。在第二種情況中紊婉,你應(yīng)該使用stride(to:by:)來(lái)創(chuàng)建一個(gè)循環(huán)。所以辑舷,在swift 2.2 中喻犁,上面兩個(gè)情況的正確的寫(xiě)法為:

  for i in (1...10).reverse() {
      print(i)
  }
  for i in 0.stride(to: 10, by: 2) {
      print(i)
  }

6.++和—是過(guò)時(shí)的。如果你正在使用C語(yǔ)言風(fēng)格來(lái)創(chuàng)建一個(gè)循環(huán)何缓,那么接下來(lái)的改變可能會(huì)令你吃驚肢础。++和—也過(guò)時(shí)了。那么類似for var i = 0; i < 10; i++的操作將包含兩個(gè)過(guò)時(shí)的操作碌廓。盡管swift身處快速的改變的世界传轰,但這樣的改變依然是不同尋常的。你可以用 i += 1 和 i -= 1 來(lái)取代 ++ 和 --的操作谷婆。

7.用var parameters 表示的變量參數(shù)是過(guò)時(shí)的慨蛙。在swift 2.2 之前,如果你想在函數(shù)能不修改傳進(jìn)來(lái)的參數(shù)纪挎,那么你可以用var 給參數(shù)進(jìn)行聲明期贫,例如:

  func greet(var name: String) {
      name = name.uppercaseString
      print("Hello, \(name)!")
  }
  var name = "Taylor"greet(name)print("After function, name is \(name)")

當(dāng)時(shí),這確實(shí)是一個(gè)有效的快捷方式异袄,但是通砍,這也確實(shí)增加了一些混亂:最后的輸出語(yǔ)句print()將會(huì)輸出“Taylor”還是”TAYLOR”呢?當(dāng)inout這個(gè)關(guān)鍵字出現(xiàn)的時(shí)候烤蜕,這甚至?xí)斐筛蟮幕靵y封孙。所以,使用inout 而不是var讽营,并且添加一個(gè)簡(jiǎn)單的符號(hào)虎忌。代碼如下:

  func greet(inout name: String) {
        name = name.uppercaseString    
        print("Hello, \(name)!")
  }
  var name = "Taylor"greet(&name)print("After function, name is \(name)")

8.重新命名了測(cè)試標(biāo)識(shí)符。__file__ , __line__ , __func__ , __column__將會(huì)被#file,#line,#func,#column所取代斑匪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呐籽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚀瘸,更是在濱河造成了極大的恐慌狡蝶,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贮勃,死亡現(xiàn)場(chǎng)離奇詭異贪惹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寂嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)奏瞬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人泉孩,你說(shuō)我怎么就攤上這事硼端。” “怎么了寓搬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵珍昨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我句喷,道長(zhǎng)镣典,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任唾琼,我火速辦了婚禮兄春,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锡溯。我一直安慰自己赶舆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布祭饭。 她就那樣靜靜地躺著涌乳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甜癞。 梳的紋絲不亂的頭發(fā)上夕晓,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音悠咱,去河邊找鬼蒸辆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛析既,可吹牛的內(nèi)容都是我干的躬贡。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼眼坏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拂玻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤檐蚜,失蹤者是張志新(化名)和其女友劉穎魄懂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體闯第,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡市栗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咳短。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片填帽。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咙好,靈堂內(nèi)的尸體忽然破棺而出篡腌,到底是詐尸還是另有隱情,我是刑警寧澤勾效,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布哀蘑,位于F島的核電站,受9級(jí)特大地震影響葵第,放射性物質(zhì)發(fā)生泄漏绘迁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一卒密、第九天 我趴在偏房一處隱蔽的房頂上張望缀台。 院中可真熱鬧,春花似錦哮奇、人聲如沸膛腐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哲身。三九已至,卻和暖如春贸伐,著一層夾襖步出監(jiān)牢的瞬間勘天,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工捉邢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脯丝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓伏伐,卻偏偏與公主長(zhǎng)得像宠进,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藐翎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容