中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Swift 在對 Objective-C 改進(jìn)的 6 個(gè)方面

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

  在 Atomic Object 的安娜堡辦公室,我們做了一個(gè)觀看2014年的WWDC主題演講,毫不夸張地說,當(dāng)Swift宣布的時(shí)候,我們感到十分激動(dòng)。Swift,蘋果正在推進(jìn)的一個(gè)更現(xiàn)代的編程語言。我很高興能獲得先機(jī)并開始用它開發(fā)。 

  在這篇博文中,我將重點(diǎn)介紹Swift的幾個(gè)語言特性,這將使開發(fā)者的工作更加輕松。

 Objective-C語言的問題

  當(dāng)一個(gè)開發(fā)者申請一個(gè)關(guān)于Atomic Object的新職位時(shí),我們會(huì)給他填寫一個(gè)(GTKY) Getting To Know You的表。這個(gè)表要求填寫一些常見的問題,包括技術(shù)和其他方面,比如你最喜歡的語言是什么,你會(huì)做些什么來改進(jìn)它?很多開發(fā)者的回答不能令人滿意,即使開發(fā)人員選擇objective-C作為他們最喜愛的語言時(shí),也想不出如何改進(jìn)它!
這個(gè)回答產(chǎn)生了大量的討論,讓我想起一個(gè)Objective-C的問題。僅舉幾例:

  • 弱類型 - 通常處理id或class,并且需要可怕的C static casts 。

  • 欠佳的枚舉語法 - for in已經(jīng)很好了,但我經(jīng)常想到一個(gè)更好的索引。

  • 缺少操作符重載的類,例如NSNumber的。

  所以,我很高興蘋果宣布swift并公開了其語言細(xì)節(jié)。在這里我會(huì)談一些對Objective-C語言的批評。我強(qiáng)烈建議開發(fā)人員下載Swift的書,看一看在Xcode 6的測試版。

 激動(dòng)人心的Swift特性

  1. 類型推斷

  對我來說這個(gè)很有用。無比煩惱的是你不得不將id類型的實(shí)例非安全的轉(zhuǎn)化為實(shí)際類型,這很容易出錯(cuò)并且向一個(gè)實(shí)際對象并不相應(yīng)的id發(fā)送信號(hào)?偸菣z查respondsToSelector太乏味了。Swift給我們提供了一個(gè)解決方案---var關(guān)鍵字:

1> var anInt = 0
  anInt: Int = 0
2> var aDouble = 0.0
  aDouble: Double = 0
3> var anotherDouble: Double = 0
  anotherDouble: Double = 0
4> var aString = "some string"
  aString: String = "some string"

  注意:就像anotherDouble那種情況,你也可以顯示的設(shè)置類型?梢杂胿ar同樣的方式使用let來推斷常量的類型。

  2. 改進(jìn)枚舉語法

  Objective-C有不錯(cuò)的集合枚舉語法:

for (SomeType someObject in array)
    NSLog(@"%@", someObject.whatever);

  這是個(gè)不錯(cuò)的語法糖,但是問題是現(xiàn)實(shí)編程中,我通常需要一個(gè)和集合中元素實(shí)例一起的索引變量。.

  Swift 給了我們許多有用的集合枚舉器, 但是尤其令人高興的是他們提供了一個(gè)全局的enumerate()方法,可以用來返回一個(gè)包含了數(shù)組中元素和索引的元組。

19> array
$R2: String[] = size=4 {
  [0] = "one"
  [1] = "two"
  [2] = "three"
  [3] = "four"
}
20> for (index, value) in enumerate(array) {
21.     println("Item \(index): \(value)")
22. }   
  Item 0: one
  Item 1: two
  Item 2: three
  Item 3: four
23>

  3. Override關(guān)鍵字

  當(dāng)在類中聲明一個(gè)實(shí)例函數(shù)時(shí),如果他們覆蓋了一個(gè)基類函數(shù),他們必須標(biāo)記為override的。如果沒有這么做則會(huì)得到一個(gè)編譯時(shí)錯(cuò)誤。類似的,如果一個(gè)標(biāo)記為override的函數(shù)沒有覆蓋基類的相應(yīng)函數(shù),同樣得到一個(gè)編譯錯(cuò)誤。這一行為將的類更加的清晰和降低運(yùn)行時(shí)崩潰的可能性。

  4. 多返回值

  在我加入Atomic之前的那份工作中,我主要開發(fā)C++,并且經(jīng)常發(fā)現(xiàn)自己寫一些輸出多值的方法。我總是為決定使用引用,pair還是將返回值包裝為struct或class來作為參數(shù)傳遞而掙扎不已。

  在Swift中,有內(nèi)置的機(jī)制來用一個(gè)由任意數(shù)量的帶標(biāo)記的數(shù)據(jù)成員的組成的元組作為多返回值。

46> func calculateStatisticsFromArray(data: Double[]) -> (mean: Double, median: Double, mode: Double) {
47.          return (62, 44, 12)
48. }   
49> var stats = calculateStatisticsFromArray([])
stats: (mean: Double, median: Double, mode: Double) = {
  mean = 62
  median = 44
  mode = 12
}
50> stats.mean
  $R10: Double = 62
51> stats.median
  $R11: Double = 44
52> stats.mode
  $R12: Double = 12

  Swift同樣支持聲明多個(gè)變量來顯示的獲取多返回值:

<51> var(mean, median, mode) = calculateStatisticsFromArray(data)

  5. willSet, didSet

  在 Swift中, 類具有屬性(類似于Objective-C)。有一個(gè)聲明setter和getter的機(jī)制,如果屬性的類型是簡單的并且需要計(jì)算的,但是你想觀察他們的變化,兩個(gè)內(nèi)置的需要覆蓋的方法-willSet和didSet將會(huì)有幫助。

1> class Container {
2.     var someValue: Double = 0.0 {
3.         willSet {
4.             println("willSet! \(newValue)") 
5.         }
6.         didSet {
7.             println("didSet! \(someValue)")
8.         }
9.     }
10. }
 
11> var c = Container()
  c: Container = {
    someValue = 0
  }
12> c.someValue = 100.0
  willSet! 100.0
  didSet! 100.0

  6. REPL

  REPL表示“read-evaluate-print-loop”,我認(rèn)為它是通過沙箱測試輸出的代碼.您可以輸入代碼到REPL,如果您在使用一個(gè)IDE或者喜愛的文本編輯器,它會(huì)被編譯/解釋和實(shí)時(shí)運(yùn)行,并馬上能讓你看到輸出結(jié)果。這是開發(fā)人員努力學(xué)習(xí)這門新語言時(shí)能看到的一個(gè)強(qiáng)大功能。我一直在使用它來學(xué)習(xí)swift。

  使用SWIFT REPL:

  1.下載Xcode 6 Beta版。

  2.在終端中運(yùn)行以下命令來切換路徑xcrun:

   sudo xcode-select -switch /Applications/Xcode6-Beta.app/Contents/Developer.  

   注意:如果要重置,請?jiān)谑褂媒K端里鍵入 xcode-select -r

  3.xcrun swift

 誰將擁有未來?

  我堅(jiān)信,在iOS 8和以后的版本中,Swift將成長成為iOS開發(fā)的主流語言。盡管如此,蘋果已經(jīng)向我們保證,在運(yùn)行時(shí)將保持二者兼容:我們的Objective-C應(yīng)用程序仍然可以繼續(xù)工作。同樣清楚的是Swift的語法和語義將改變后的iOS 8。蘋果告訴我們,他們不能保證源代碼的兼容性,但會(huì)提供代碼轉(zhuǎn)換器。使用代碼轉(zhuǎn)換器的想法讓我害怕了一下,我認(rèn)為遷移到Swift的時(shí)間會(huì)來得早(iOS的8-9的樣子),而不是以后。

  原文地址:http://spin.atomicobject.com/2014/06/13/swift-improves-objective-c/

標(biāo)簽: 安全 代碼 開發(fā)者

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Coconut2D:跨平臺(tái)2D游戲及應(yīng)用開發(fā)工具

下一篇:7 個(gè)讓你意想不到的 Android 系統(tǒng)應(yīng)用領(lǐng)域