欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift能代替Objective-C嗎?

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

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

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

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

====

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Swift教程之枚舉類(lèi)型詳解

    這篇文章主要介紹了Swift教程之枚舉類(lèi)型詳解,本文講解了枚舉語(yǔ)法、匹配枚舉值與switch語(yǔ)句、關(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)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用RxSwift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(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入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 詳解Swift面向?qū)ο缶幊讨械姆椒?method)

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

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

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

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

最新評(píng)論