亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Swift能代替Objective-C嗎?

 更新時(shí)間:2014年09月25日 15:42:38   投稿:hebedich  
這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過來和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開發(fā)的影響和對(duì)Objective-C的影響。

我文章的中心是,以 Apple 目前給出的各種資料來看,這語言不會(huì)替代掉ObjC,它不是下一代的ObjC。它有很多缺點(diǎn),使得它不足以做大型項(xiàng)目。這些缺點(diǎn)使得,Apple 自己都沒有使用它做 Mac/iOS 的 app。我不排除明年后年它有很大改進(jìn),但至少現(xiàn)在還沒有這端倪。

因此,如果你會(huì)ObjC,你不需要去看它。

但你如果問我這語言對(duì)普通開發(fā)者重要不重要,我說重要,可以明確告訴你這一點(diǎn)--它是 Apple 在 WWDC 向全世界推出的重磅語言我怎麼能說它不重要? 它降低了入門的門檻。使得大量的 JS, Python, Ruby用戶會(huì)使用 Apple 的技術(shù)為其開發(fā)程序。它的作用,和 Core Data, Interface Builder 一樣,能讓你快速寫出一個(gè)能用的程序來。但如果你想稍做些正經(jīng)事,就心有馀力不足了。所以和 Apple 自己的 Mail 也不會(huì)去用 Core Data,自己 iPhoto 不會(huì)去用 UICollectionView,稍複雜的 App 都不會(huì)去用 Interface Builder 一樣,Apple 自己不會(huì)用 Swift。它只是給三五個(gè)人的小團(tuán)隊(duì)能迅速做出能用的程序,讓大公司能快速做些 Prototype 而已。

====

有人說它相當(dāng)于 C#,或是相當(dāng)于 Scala 對(duì) Java 的改進(jìn),我可以告訴大家,Swift 不是這樣的語言。它更像一種讓人快速做原型的 toy language。

要求 Apple 發(fā)佈下一代 Objective-C 語言的呼聲早就有了,每年寫數(shù)萬字 OS X 評(píng)論的 Ars Technica 兩年前就寫了 Apple 應(yīng)該去做一個(gè)語言,Objective-C without C 并且使用更現(xiàn)代的功能和更短的 API,以及對(duì)自動(dòng)類型推導(dǎo)的支持,文章見 OS X 10.8 Mountain Lion: the Ars Technica review 。

但 Apple 顯然沒有認(rèn)真對(duì)待這門語言。很明顯的,他們根本不想把ObjC給替換掉。并且按Apple的風(fēng)格,如果他們把Swift當(dāng)ObjC的未來來對(duì)待,肯定會(huì)有一到兩個(gè)iOS/Mac應(yīng)用使用Swift改寫。(比如Apple 當(dāng)年要砍 Carbon,首先做的就是把 Finder 重寫了)。

從語言角度,Swift 有太多的缺點(diǎn):

它的標(biāo)準(zhǔn)庫太差,只有Dictionary, Array 和 String及數(shù)這幾種數(shù)據(jù)結(jié)構(gòu),連個(gè) Set 都沒有。想用別的?你還是要用 ObjC 的。是的,當(dāng)你用原生數(shù)據(jù)結(jié)構(gòu)時(shí),速度比ObjC快。但是那僅限于那幾個(gè)。 它沒有任何對(duì)異步/同步編程的支持。它沒法綁定使用 Grand Central Dispatch,因此任何正經(jīng)的網(wǎng)絡(luò)應(yīng)用根本無法編寫。

它沒有任何的保護(hù)機(jī)制(private, protected),所有的 method和 variable 都是全局可見的,這顯然不能滿足正經(jīng)工程項(xiàng)目的需要。

只能和 ObjC 互動(dòng)。如果你想正經(jīng)地使用C或者C++,你得寫 ObjC 的 wrapper。這基本限制了你使用大量的 C/C++ 庫函數(shù)。
沒有辦法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立馬就崩了。這也基本限制了你使用很多 ObjC 舊代碼庫。

Chris 在設(shè)計(jì)這門語言時(shí),可以明顯地看到他的短視。這也很正常,他是一個(gè)做編譯器的,不是做語言研究的。所以這門聲稱支持函數(shù)式編程的語言,根本沒有大多函數(shù)式語言都普遍存在的功能:

僅有的支持在lazy,閉包,及簡(jiǎn)單的函數(shù)語言函數(shù)(如map, filter)。這ObjC中都能做
沒有pattern matching
類型推導(dǎo)差不多和 C++11 差不多,沒有使用hindley milner
從上面這些特點(diǎn)看, Apple對(duì)其的定位僅是給對(duì)ObjC頭疼的開發(fā)者降低學(xué)習(xí)曲線所推出的玩具語言。前面五條中的每一條,基本都是致命的,因此 Apple 自己的項(xiàng)目也不會(huì)使用。做個(gè)早期 proof of concept的 prototype 到是可以的。

我可以想象,實(shí)現(xiàn)上 Swift 是很簡(jiǎn)單的(LLVM很成熟了,寫個(gè)新語言越來越簡(jiǎn)單,比如只要幾步就能做個(gè)小語言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),當(dāng)然有可能 Apple 將來會(huì)解決這些問題使得其真正實(shí)用。但現(xiàn)在來看,Apple 并不希望 Swift 來替代 Objective C。

相關(guān)文章

  • 解析Swift語言面相對(duì)象編程中的繼承特性

    解析Swift語言面相對(duì)象編程中的繼承特性

    這篇文章主要介紹了解析Swift語言面相對(duì)象編程中的繼承特性,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Swift中switch語句區(qū)間和元組模式匹配

    Swift中switch語句區(qū)間和元組模式匹配

    這篇文章主要介紹了Swift中switch語句區(qū)間和元組模式匹配的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法示例

    Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法示例

    Swift語言中沒有內(nèi)設(shè)的棧和隊(duì)列,很多擴(kuò)展庫中使用Generic Type來實(shí)現(xiàn)棧或是隊(duì)列。下面這篇文章就來給大家詳細(xì)介紹了Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • Swift 5.1 之類型轉(zhuǎn)換與模式匹配的教程詳解

    Swift 5.1 之類型轉(zhuǎn)換與模式匹配的教程詳解

    這篇文章主要介紹了Swift 5.1 之類型轉(zhuǎn)換與模式匹配的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Swift教程之枚舉類型詳解

    Swift教程之枚舉類型詳解

    這篇文章主要介紹了Swift教程之枚舉類型詳解,本文講解了枚舉語法、匹配枚舉值與switch語句、關(guān)聯(lián)值、原始值等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • RxSwift實(shí)現(xiàn)替換delegate的方法示例

    RxSwift實(shí)現(xiàn)替換delegate的方法示例

    這篇文章主要給大家介紹了關(guān)于RxSwift實(shí)現(xiàn)替換delegate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用RxSwift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Swift設(shè)置UILabel內(nèi)邊距的實(shí)例代碼

    Swift設(shè)置UILabel內(nèi)邊距的實(shí)例代碼

    有時(shí)候,我們需要一個(gè)顯示文字,又想這些文字與邊界之間有自定義的邊距,所以下面這篇文章主要給大家介紹了關(guān)于Swift設(shè)置UILabel內(nèi)邊距的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 詳解Swift編程中的方法與屬性的概念

    詳解Swift編程中的方法與屬性的概念

    這篇文章主要介紹了Swift編程中的方法與屬性的概念,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 詳解Swift面向?qū)ο缶幊讨械姆椒?method)

    詳解Swift面向?qū)ο缶幊讨械姆椒?method)

    既然面向?qū)ο竽蔷鸵欢〞?huì)有method,方法和面向過程語言中的function函數(shù)并沒什么區(qū)別,只不過方法在面向?qū)ο笳Z言中可以被類來約束作用域,這里我們就來詳解Swift面向?qū)ο缶幊讨械姆椒?method)
    2016-07-07
  • Swift中類與結(jié)構(gòu)的初始化示例解析

    Swift中類與結(jié)構(gòu)的初始化示例解析

    這篇文章主要為大家介紹了Swift中類與結(jié)構(gòu)的初始化解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03

最新評(píng)論