可以跳過 Objective-C 然後直接學習 Swift 語言嗎?

沒有Objective-C基礎直接學習swift可以咩?同理可問: 沒有C/C+基礎直接學習lua可以咩?


我就是零基礎學習swift語言,之前是寫javascript,學了有3-4天了吧,說下我的感受,和這個東西與前端開發的關係。

開始之前,寫下這個答案我的主要觀點: 可以跳過oc直接學習swift,一點問題沒有的,只不過後期我覺得還是要學下oc,因為畢竟很多時候你用的都是oc寫好的類,遇到bug了一點不會,太捉急了吧,還有不少教程都是以oc為例子的,看著也捉急~

看我下我拿swift寫的demo……毫無違和感好么。。~

http://ww3.sinaimg.cn/bmiddle/62bfb217jw1ehg4havla3g208w0gctki.gif

http://ww3.sinaimg.cn/bmiddle/62bfb217jw1ehh5muu356g208y0dwqda.gif

http://ww1.sinaimg.cn/bmiddle/62bfb217jw1ehhatl90zfg208s0dynpe.gif 【代碼地址下圖】

http://ww4.sinaimg.cn/bmiddle/62bfb217jw1ehhatvusprj20or0kz78o.jpg

知乎的圖片不支持gif啊- - 只有貼地址了

首先看swift的基礎語法,了解了最基本的控制,變數,數據體,類與結構體,繼承之後,開始可以寫一些簡單的命令行工具,說白了就是終端工具,列印log之類的沒一點問題。

可惜,我們學習這個東西不是為了開發command line程序的,我用shell或者nodejs也挺好比這個上手還快。

所以緊接著第二天開始直接跳過command line程序編寫ios app,也就是iphone程序。

然後我就覺得我他媽的掉進了一個深坑。

搜了一下 現成得swift教程做app的中文幾乎沒有,國外有幾篇講的是開發一個todolist的教程,寫的和官方的那個oc的todolist教程差不多,但是從我開始做到最後結束跑到模擬器里,我他媽也沒寫上超過20行得swift。。。基本都是IB實現的界面,事件,換場以及控制項的創建。

我琢磨那他媽的我用oc也是一樣的,算了,ios開發莫非就只是拖拖控制項?了解一下mvc的概念就ok?

於是我去github上開始搜索開源的swift項目,比如2048,還有那個flappy,還有一個天氣app的軟體。

看了幾行源碼我就特么的放棄了。倒不是看不懂,我發現都是基於cocoa的,什麼cocoa呢?我又去搜了一下,說了我是ios開發小白一點經驗沒有,然後我發現又是他媽的一個深坑啊。。cocoa的api都是oc編寫的啊,swift是可以直接調用沒的問題,可是cocoa的功能實在太多了啊。。

最他媽主要的是cocoa的幫助手冊例子代碼,api都他媽的是oc的api啊……我完全不會oc,我說了我是零基礎,然後我在思考,我是否需要去學習下oc回來才能看懂那些api到底是怎麼調用?那麼多開源包都是些什麼東西?

卧槽,那我學會了oc,我還學swift幹啥呢?

不是說不用學oc了么……我特么的學swift就是為了不想了解oc啊。結果呢。

你不會oc也就是寫寫command line程序啊……我去你大爺的啊- -。

還有,xcode功能如此強大,我感覺如果自己寫著玩,根本啥也不用學好么,滑鼠拽拽一個app就出來了啊。。

而專家級呢?我覺得大部分得oc庫,類都還都是oc的,你用swift可以調用,但是如果有bug呢?你想看內部實現呢?商業項目中這種開源坑遇到太多了,難道你就只用swift搞定么?

不太可能,也根本不可能,大家的代碼都是oc的,底層是oc的,表現層也是,那麼你swift到底是幹什麼用的呢?

===================================================

這是我學習了不到一周對swift和ios開發的理解,不學oc,我開發的時候就經常會陷入【這他媽是啥,這他媽又是啥的一個一個深坑】

好了,就說這麼多,最後扣下我第一句話。

swift開發和前端開發的關係就是java和javascript關係,雷鋒和雷峰塔的關係。

PS,我發現其實文檔中的實例代碼是有swift的例子的,不知道是不是自動更新的,記得上周還木有。剛才發現有了,也可能之前我沒仔細看~木哈哈。比如下面這段:

給蘋果的文檔 贊一個。。但是我依然不他媽的知道那個UIControlState是特么啥,我覺得,會oc開發的同學上手一定比0基礎的要快很多……!

給蘋果的文檔 贊一個。。但是我依然不他媽的知道那個UIControlState是特么啥,我覺得,會oc開發的同學上手一定比0基礎的要快很多……!


Aaron Hillegass 認為 iOS 開發必須熟悉 Objective-C、相比 Swift,Objective-C 更容易學習、掌握了 Objective-C 再學 Swift 會變得容易:

When Apple announced Swift, I heard a few people say "Hurray! Now I can be an iOS developer without learning Objective-C!" I have three messages for these people:

  • If you want to be an iOS developer, you will still need to know Objective-C.
  • Objective-C is easier to learn than Swift.
  • Once you know Objective-C, it will be easy to learn Swift.

他詳細的論述 ── iOS Developers Need to Know Objective-C | Big Nerd Ranch


是可以的。

但是要看你用來做什麼。
如果是希望自己做一款專屬的app,swift完全可以勝任的。
如果學了技能要去工作的,那麼是逃避不了oc的。

事實上swift沒有說的那麼簡單,任何東西要深入都不會簡單到哪裡去。


如果只是學習Swift的語法和做基本練習的純計算性的編程,不用學習Objective-C,用Swift的Playground就很好了。但沒有Objective-C的基礎,幾乎不可能用Swift寫出Mac OSX和iOS的GUI實用程序的,這些需要cocoa框架,而cocoa框架是以Objective-C來編寫API的。Swift的cocoa API其實只是對Objective-C的API的直接bind。

這幾天用了Swift後感覺其和Objective-C是渾然一體的,用Swift調用Objective-C的函數是非常自然的,兩者之間沒有明顯的界限,就像編寫C語言的嵌入式彙編一樣。

我覺得蘋果為何要推出Swift這門語言,主要還是Objective-C缺少現代編程語言的特性,特別是很難在Objective-C中增加函數式編程的特性。推出Swift語言,可以大量吸收現代編程語言的優點,加入函數式編程的特性,使得可以快速開發健壯、可靠、複雜的應用程序。而Swift又不是直接取代Objective-C的位置,是在其之上,因此又很好的繼承了Objective-C的優良的GUI應用的編程能力。即能創新進取,又保持優良傳統,多好的一個設計呀。有了Swift後,蘋果平台上的Mac OSX和iOS的native應用開發就進入了現代編程語言的範疇,跟上了時代的發展。

最後安利一下,學會Haskell後,學習Swift語言就相對容易很多了,很多概念的理解也就更直觀了。


直接開始學swift沒問題,應該可以覆蓋objc的所有主要功能,並非輔助語言。Apple開發這個語言的目的就是幫助初學者快速上手。

但是,看他的特點比較像scala,類似這種語言都容易上手,難於規範。因為太多靈活,不夠死板,不會大規模用於企業的大項目。學swift,估計自己開始做了幾個小應用之後還是需要迫於行業規範再去學習objc

一句話,獨立開發可以從swift開始,找工作求職還是先學obj-c吧


不建議,原因去下。
凡是有經驗的程序員都知道語言不是關鍵,關鍵的是框架。
如果學習iOS開發你就需要使用cocoa,實際上這個cocoa十幾年了都是用objective-c來寫的,所以你如果很懂oc很容易理解cocoa的各種功能和api為什麼要這麼寫,而swift則不行,因為swift包含很多高級語言的特性,你從swift的角度不太好理解。
第二個原因是因為,從07到現在,程序員用oc寫iOS程序已經接近6,7年,各種各樣的第三方框架層出不窮,你要用網路相關的,行。afnetworking,動畫的pop,資料庫的fmdb,等等。當然用swift開發你也可以使用oc寫的第三方庫。關鍵的是,這麼多優秀的框架你因為語言的原因,不能讀源碼。是不是很可惜?而且如果有個第三方控制項,你們產品需要你去改一些地方,你說,你不懂oc所以改不了。怎麼辦。
優秀的iOS必然是精通objective-c的,因為學習一門語言很簡單,難得是精通框架,熟悉各種常見的坑,從目前來看,oc在這些方面,都比現階段的swift強。當然,未來肯定是swift的天下。


呃 剛寫了個APP
我本身對OBJ-C的認識很有限,也就是斯坦福那個iOS7公開課看了幾節的水平,跟著做了那個翻紙牌的遊戲。
今年(2015)寒假,決定自己寫一個提醒事項的APP,現在也寫出來了,談談我的感受吧。
首先,我的答案是,如果你一點OBJ-C的基礎都沒有的話,想寫一個純Swift的APP是很難的。
這句話的意思是你不僅要熟悉OBJ-C的基礎語法,還要對編程,尤其是面向對象編程有一定的了解。不然真的很難空手寫出一個APP。我是軟體專業的學生,雖然對OBJ-C沒啥了解,但是有學校學的JAVA打基礎,最基礎的面向對象編程的知識還是有的,我也就是在這個基礎上自學Swift來寫APP。也是遇到了很多問題。
兩個重要的坑:
1.學習了Swift語法和特性離寫一個APP還有好遠的路
直到我正式新建了一個項目,我才知道給iOS寫APP,Swift/OBJ-C只是個工具,你更多時候是和各種蘋果提供的庫打交道。比如我寫的reminder,就要和EventKit打交道,當然還有UIKit。你需要去蘋果的開發者網站去看種種屬性和方法。搞懂這些才是APP開發的開始。蘋果為你提供了套差不多的library,你可以查詢,但是不要指望太多,只有最基礎的內容有Swift版。比如這篇《Calendar and Reminders Programming Guide》Introduction to Calendars and Reminders 純OBJ-C。一旦你遇到問題去百度,基本都是OBJ-C,去Google,去StackOverflow,情況會好一點,但基本上也都是OBJ-C。你遇到的問題大概別人也遇到過,也解決過,解決方法嗎,看見那堆[ ]了嘛?對的,OBJ-C。而且基本上你遇到的問題是因為你對NS開頭的庫和不是NS開頭的庫的了解不夠。解決你問題的方法也都需要你對NS開頭的庫和不是NS開頭的庫有基礎的理解。所以即使會Swift,也不能說就會iOS開發。你需要先知道蘋果給的這套API的功能和使用方法。這是APP開發的基礎
2.調用第三方庫是你永遠的痛
如果你真的沒有一點OBJ-C的基礎的話,接下來才是讓你痛苦的地方。這個世界上有各種各樣的已經造好的輪子,作為一個(不會造輪子的)程序員,調用這些比自己列害又靠譜的程序員寫好的第三方庫是非常好的節省時間和腦細胞的。但是,但是,但是,這些庫98%都是用OBJ-C寫的!
且不說CocoaPods或者Carthage的學習成本,假設我們已經把這些第三方庫平安的放到自己的項目里,作為一個沒有OBJ-C基礎的人來說,想調用它基本就是不可能的任務。對於那些沒有Swift版本tutorial/usage的第三方庫。你面對的是整篇的[ ] [ ] [ ] 。而你需要做的是,把他們翻譯成Swift版本。 如果你一點OBJ-C基礎都沒有,那就真的沒辦法了。

所以,不必精通,你需要稍微了解它(OBJ-C)的基礎,知道xxx* abc = var abc:xxx 知道[abc def] = abc.def 知道^() {} = {in}等等
這有一份非常可愛的轉換指南Using Swift with Cocoa and Objective-C: Interacting with Objective-C APIs

了解了OBJ-C之後,你需要一本結合Swift和Cocoa的教材,中文的我買了本《Swift語言實戰入門》,說實在的一般,對Swift的介紹沒有網上的The Swift Programming Language中文版介紹的詳細,有時候覺得還有點缺失,對Cocoa的介紹也比較少。後來我在網上搜索了下,買了本IOS8AppEssentials,花了15刀,跟著裡面走了一遍,算是對iOS開發有了基礎了解。當然也有更貴的iOS 8 Swift Programming Cookbook O"REYLLY家的,要價50刀,沒買……

最後也是最主要的,你要有英語基礎。


2015.5.17 更新

Swift 和 ObjC 沒有任何關係,所以簡單的理解,完全可以跳過。

不過覺得樓主應該含有一個隱藏的前提:對於iOS(或Mac)開發, 可以跳過ObjC直接學swift嗎? 如果這麼問,答案不會那麼純粹。

其實學習一個語言,對於有編程基礎的人來說,語法規則只需要簡單看看很快就能掌握。但是對於真正會使用一門語言,只知道語法規則是不行的,還需要熟悉語言配套的基礎庫。對於 iOS 開發,無論是 Swift 還是 OC 這套基礎庫都是 Cocoa。Swift 版的 Cocoa 幾乎都是機器直接轉換過來的,和 OC 是一模一樣的。而對於 iOS 開發,很多的時間都是花費在這上面,所以無論選擇學 Swift 或 OC,其實後面的差別都不太大。

1. 如果只是愛好者,業餘做做 App,我覺得直接學 Swift 是可以的。因為apple開發 Swift 的目的就是為了代替 OC,OC 可以實現的 Swift 也都可以實現。而且 Swift 推出已經有一段時間,很多入門的教程都是直接從 Swift 開始的,學習資料也很豐富。不過如果稍微進階一點,當你在 StackOverflow 搜索問題的時候,還是有很多以前的問題是用 OC 來回答的,如果一點不懂,豈不是錯過了那麼多好的資源。

2. 如果是想從事iOS開發的學生/初學者,ObjC是必須面對的事情。雖然現在已經不用考慮版本兼容的問題,已經沒有新 App 會支持低於 iOS7 的版本了。但是老的項目還有很多用 OC 來寫的,而且幾乎沒有必要更換成 Swift。如果遇到 OC 的代碼需要更改,或者需要借鑒一個成熟的第三方庫的 OC 代碼,不懂怎麼行。還有一些如 Selector 的概念,如果不學 OC 就會覺得莫名其妙。就像前面說的,學習 iOS 開發,大頭不在語言,共通的部分都學會了,補一補一個很簡單的面向對象的 OC 還是很大的問題嗎。而且現在的 Swift 在編譯速度上(雖然現在 Xcode 6.3.1 已經比以前強多了),增量編譯檢查,LLDB 中的補全等問題上還沒有 OC 做得好,新項目使用 Swift 並不具有絕對的優勢。所以無論先學還是後學,OC 都是終究要面對的事情,不過它不是一個難的事情。


答案是可以
為什麼可以回家電腦更新


編程語言都是大同小異,差別很小的,重點是平台。
SWIFT不可能大幅度減低IOS/MAC平台APP的開發難度,如果用OBJ-C開發的難度是100,那麼用SWIFT頂多是95的難度,僅此而已。
學習SWIFT不會比OBJ-C更難,也不會更簡單,重點是平台。
難點都在平台上,而不是編程語言。
網上OBJ-C有海量的例子、問題解決方案和教程,你用SWIFT還得會自己慢慢轉換。與其如此,還不如先學OBJ-C。


swift是一門獨立的開發語言 又不是oc的附庸 為什麼不能直接學習呢
而且這樣坑會少一點


他妹的,答案清一色都是可以啊!!
我這種從來不寫答案的人都忍不了了。

題主我給你的回答是不可以,保守估計三年之內都不可以。

oc和swift是倆語法差異很大的語言,所以就可以不學oc了?錯!正是因為差異大,才要學。oc和sw(手機打字容我這樣簡稱)是可以在項目中混編的,只學習了sw就意味著在項目中只能使用sw,那麼項目組中的其他人呢,人家就是習慣了oc,退一萬步講,公司項目組強制大家全都使用sw,我相信絕大部分公司也只能說新模塊用sw,老模塊用sw重構?開玩笑,不可能也不值得。
再說說三方庫,成熟大公司的sdk比如tt或者fb會及時發布sw版我相信,但這實際上那麼多三方庫,很多都是個人開發的,或者也有非營利性組織開發的,你指望用上sw版,那得猴年馬月。有的同學會說只調用三方庫應該還好,我答曰:好不到哪去,調用就很簡單嗎?不一定。況且開源三方庫的優勢就在於可定製化,可自行修bug。沒有oc技能,出了問題只能幹瞪眼可不行。
這就好比某天人類發明了飛行公交車,其牛逼程度到了高速度低油耗外觀優美不堵車還不比汽車貴,就是駕照不通用,得另外考,那一個公交司機能只學飛行汽車駕駛技術嗎,顯然不能啊拜託。你總不能面試時候對公交公司講我是來開飛車的破車我不開吧。難道公交公司會一下子報廢所有地上跑的車子?轉手賣?誰要啊摔!
另一個活生生的例子就是svn啊,跟git比起來簡直難用到shi,還得學著用不是?
新項目一開始就只用sw這倒是可以,不過,三方庫問題還得會oc的人來解決不是。
另,像我這種越獄平台開發猿,離sw更遠了。


這就好比 wow 開到70級,人家一身 T2/T3沖70,你千金馬還沒有.等你70了,人家已經開荒好久T5了..
你以為你和人家一樣一身 T6就一樣牛逼了咩?人家的操作,意識還是要領先你的..這個就純靠經驗積累了..

想趕上有 Cocoa 和 OC 經驗的人,完全可以,要付出更多的努力.


所謂高級語言拋開專業的技術性不談,如果在易用性和人機交互方面沒有提升的話在我看來還高級個P呢?如果不能拋開對某基礎語言的依賴還算什麼"新"語言呢?
所以,不用擔心沒有某某語言基礎就不能學習某某新款高級語言,沒有打孔機,彙編語言,指針地址等基礎一樣可以上手C#。注意,我說的上手,不是精通,知乎這地方噴子太多,說話要小心……
畢竟在這個程序設計逐漸工具化的年代,對於一般選手來說高效開發才是王道,性能或者代碼優雅什麼的是專業級選手的標準。我爸那個年代開車的不會修車都不算會開車,現在你開的車自己會修嗎?一碼事兒


騷年,新資料片已開啟,所有玩家天賦點都重置了,大家的起點都一樣。


Swift的發布我認為就是面向不會OC,而有意轉向ios開發者的,尤其是web前端,會了oc感覺沒必要一定去學swift,至少不用著急去學。swift應該是蘋果吸引新開發者的一個手段,有了更多開發者,就會有更多的好應用,自然會有更多的用戶。所以完全可以跳過OC去學,這應該正是蘋果發布它的初衷,先去學OC再學swift反而會顯多餘。等熟悉了簡單的開發流程,等真遇到局限性再去了解OC也不遲,就像學OC的時候也不一定要弄懂它底層各種用C寫的庫,即使你以後會用到。


學習IOS的資源,大多都是OC的,多學OC沒壞處,跳過OC也不是走捷徑。逢山開路,用到便學,何有此問?


swift語言之先進,各種強約束,遍地結構體,而且現在只有Foundation被翻譯到Swift,看不懂Objective-C的話還是沒有前途的。所以至少要看懂... 另外我覺得如果只有Objective-C經驗,Swift會給你相當多困惑,最好有點其他語言基礎學起來會快。


看來swift還並沒有完全脫離oc..


單從技術上面講沒有問題的,就算是個人開發也沒有問題, 但是如果以就業為目的的話,目前應該很少有公司可以完全捨棄 OC 的.


推薦閱讀:

在多語言環境,嬰兒學習語言是否會有障礙?
對於外國人來說,漢語是門很難學的語言嗎?

TAG:編程語言 | iOS 開發 | Objective-C | Swift 語言 |