有一定的Java和C基礎,iOS開發零基礎,請問我該學哪種語言?


我創建了一個 CS193P 和 iOS 開發的學習群組,有興趣可以加入,群內學習者來自全球,因此語言以英語為主。加入 Slack 群組

關於 WWDC 2020,我把更新的看法寫在這篇回答里了。

我對於 WWDC 2020 更新的關注點?

www.zhihu.com圖標

正文:

建議從 SwiftUI 開始,先玩簡單的交互界面。用蘋果官方教程:Apple Developer Documentation

接著入門 Swift 語言。用 Hacking with Swift 出的 iOS 教程:https://apps.apple.com/us/app/unwrap/id1440611372

再接著學習 iOS 理論。用斯坦福的 193P:Developing iOS 11 Apps with Swift - Free Course by Stanford on iTunes U (本教程已更新 2020 版專講 SwiftUI )

再再接著,構思一個簡單的應用程序並發布到商店。用 Ray Wenderlich 的教程:How to Submit An App to Apple: From No Account to App Store – Part 1

為擴充知識面,沒事聽聽博客。用 Swift by Sundell 的博客:Podcast | Swift by Sundell

在完成這些後,你大概已經很明確自己到底想不想做 iOS 開發了,如果你覺得越來越好玩,繼續這些。

研究 Apple Search Ad,推廣你之前發布的那個應用程序,用蘋果送的 100 美元學學廣告搜索優化。Help - Apple Search Ads

讀 HIG 確定自己開發的應用程序視覺上滿足需求。Human Interface Guidelines

在 WWDC 往年視屏里里研究下你喜歡的主題,可以從設計的視頻看起,慢慢轉向科技向。Design - Videos - Apple Developer

不會的,卡住的,去提問或閱讀大腿的解答。Stack Overflow - Where Developers Learn, Share, Build Careers

實在解決不了的問題,用蘋果的 Develoepr TSI 去提問。開發過程遇到卡殼?不必放棄,請蘋果官方幫助你

美術方面,學習 Sketch 做 Mockup,以及整理各種美術素材。The digital design toolkit

想做更複雜的東西,需要後台資料庫,去學 Firebase。https://firebase.google.com

如果你成功克服了 CS193p,或有一定的編程的基礎,或者剛剛學好了 Swift 基礎語法,想自己開發個什麼東西。推薦走以下兩條路精進。

如果你想先精進程序基礎:SwiftUI 和 Combine 是描述式和響應式編程的核心體現,也是未來 iOS 開發的主要方向。推薦閱讀閱讀 @onevcat 的書 SwiftUI + Combine 教程 SwiftUI 與 Combine 編程

如果你想先精進交互界面:可以考慮手把手跟著教程做一些簡單的交互和動畫。推薦學習 Design Code 的 SwiftUI 視頻教程。https://designcode.io/swiftui?promo=learnswiftui

如果你自己感興趣,沒人可以阻止你。共勉。


更新 1: 補充說下 CS193p,如果你沒有任何編程基礎,上這節課會略感困難,強烈建議你先完成 Hacking with Swift 的 Swift 課程,那個非常短很好學。如果此時學 CS193p 仍然感覺吃力,可以先學習 100 Days of SwiftUI 這個教程。把 CS193p 當成你在學習 iOS 路上的一個里程碑,慢慢攻克,不必急。有些人不推薦這節課認為太難,但有一天你會發現,Paul 的這節課真心是 iOS 講的最清楚的一節課。覺得它難是正常的,因為這節課沒有水分,只有乾貨。

更新 2: 我個人反而不是很推薦看 Ray Wenderlich 的紙質教程,太無聊了,足以把你的耐心消磨殆盡!寫的十分冗長,如果你感興趣可以學他們的視頻教程,做的稍微好一點。

更新 3: 有些人會好奇要不要學 OC,我的建議是,不學。向前看,前方只有 Swift 和 SwiftUI,如果你想回到過去可以去學 OC。不過真心沒必要,甚至還有人建議先學彙編語言的,對於這些建議我無言以對。建議你思考一個問題,你是想成為獨立開發者還是想找個工作,如果是獨立開發者,忘掉 OC;反之如果你想找工作,先去看你感興趣的工作的招聘要求,如果明確寫了需要熟悉 OC,這說明它們有寫代碼年事已高,你可以考慮學或者換家公司考慮。

更新 4: 初學者會面臨大家常常討論的 SwiftUI, Flutter, React, UIKit 這幾個詞。其實它們說的都是應用程序的界面編程。SwiftUI 和 UIKit 是蘋果自家的原生方案,建議優先考慮。如果你是獨立開發,想要學習自己開發個應用程序,推薦優先學習 SwiftUI,好用到了極點。自然有一天你會需要一個 SwiftUI 沒有的 View,這時候學一個專用的 UIKit 的 View 放進 SwiftUI 里就行。

更新 5: 上文中我推薦的學習方案主要從個人開發的角度出發,絕非應試。若你感興趣的是去投簡歷,上面的思路也許不適合你,或不夠。你需要去 leetcode 刷題。

更新 6: 貼一個我在「蘋果官方ios應用是用swift還是objc開發?」問題中的答案,探討蘋果官方對語言的使用。

更新 7: 放一個我剛剛為自己的應用程序做的設置界面,純 Swift + SwiftUI + Combine Framework,直接從原 UIKit 應用 UIHostingViewController 接到 SwiftUI。包括功能一起做好也就用了十個小時以內。簡單動畫用 Adobe XD, Invision Pro, Figma 還能搞定,複雜動畫直接用 SwiftUI 極省時間。

若你有興趣可以去查看下這個設置在應用中的實際表現

?書空 - 無限畫布的手寫筆記?

apps.apple.com圖標Swift+SwiftUI 速成應用設置界面

可以想像在 2014 年 Swift 剛出來的時候蘋果官方應用肯定是 objc,

那時候的庫也基本都是 objc 的庫。

2017 年之後 Swift 越來越穩定,Swift 語法逐漸穩定,猜測新的代碼應該已經使用 Swift 開發了,

2019 年隨著 Voice Memo 完全跨平台支持,以及 Music,News 等新應用程序也實現了跨平台支持,蘋果必定用了 Catalyst 的 UIKit 支持。

我剛剛看了下蘋果的招聘公告,在招 iOS News Developer,需求技能是UIKit 及對 Swift 的較強掌握,確認了蘋果正在使用 Catalyst。

而在 2019 年 WWDC 之前,SwiftUI 仍在醞釀中,未來的幾年會處於 SwiftUI + UIKit 的過渡期,可以大概預測新應用會慢慢轉型到 SwiftUI 中。

預期下一次見到 News 更新的時候它大概就會部分用上新的 SwiftUI。

再再看,iOS 中的 Mail 應用程序在 13 中獲得的脫胎換骨的變化,連 Bug 都和我最近使用 SwiftUI 遇到的問題一致,因此推斷蘋果現在已經在努力重構應用程序到 SwiftUI 了。

又由於 SwiftUI 是純 Swift 框架,可以推斷 Mail 肯定使用了 Swift。

2019 年蘋果推的新框架 SwiftUI, Combine, CryptoKit 全部都是純 Swift 框架,完全沒有 OC 支持了,可以判斷,蘋果已經快過了 OC 到 Swift 的轉型期,正在朝著 UIKit 到 SwiftUI 的轉型上努力。

我猜測,為了更好的實現跨平台的大計劃,2020 年的 iOS 14 中原生核心應用應該已經基本完成了向 Swift UI 的遷移。沒理由一直停在過去。

當然如果應用程序本身要被時代淘汰,留在 OC 也是有可能的,沒必要花時間更新肯定會被時代拋棄的東西。

一個有趣的想法,我認為未來 iOS 生態系統中大家對動畫的使用會越來越多,應用程序更 Dynamic 的可能性越發的高。因為 SwiftUI 中添加動畫簡直是容易到極點,而且能脫離開 Auto Layout 大家也越容易搭建小型可復用的 UI 塊,更容易實現對不同解析度的適配。

舉了例子,這是我剛剛搜索出的蘋果對 iOS Books 的招聘要求。要求熟悉掌握 Swift。了解 OC 是一個加分項。符合邏輯,Swift 是趨勢,了解 OC 是因為部分老代碼需要鏈接或重寫。

更新 9: 手機淘寶在 2019 年末做的 Swift 轉型完成調查中提到:

「我們通過爬蟲分析國內外 APP Store 排行榜 Top1000 的APP,通過文件掃描分析得到結論。

  1. 國內使用 Swift 的 APP 約佔比 22%,美區使用 Swift 的 APP 約佔比 78%,其中美區剩餘沒有使用 Swift的APP大部分來自中國地區本地化的產品,如抖音,快手等,可以得出一個結論,國內還是小眾的 Swift,在國外已經是現狀。
  2. Github/Stack Over Flow 社區等 Objective-C 開源庫和問題提問已經基本停滯,未來我們在落地新技術,Objective-C 可能已經是最壞的打算,加之 WWDC 17年以來,蘋果不再提供 Objective-C 的示例,組內同學也多次遇見 Objective-C Bug

    去社區提問,毫無熱度的情況。

  3. 蘋果在 WWDC19 年發布了 4 個 Pure Swift 框架,無法簡單的被 Objective-C 混編。未來我們極有可能因為蘋果的強制推進風格和社區文化的落後產生技術踏空,無法迅速響應業務,甚至無法招聘到會使用 Objective-C 的工程師。「

更新 10: CS193P 已更新 SwiftUI 版,鏈接已在上文中更新。

在我看來,很多人依舊會抓住過去不放,緊緊握住上世紀的最後一根稻草,留戀 OC 或者當下的的種種寫法與庫。這也合理,沒人願意承認自己所精通的知識正在過時。就像活著的時候沒人在意自己也會死去,裁員時沒人認為會裁到自己一樣。

同 Swift Package Manager 終會替代 CocoaPods, Carthage 一樣,

可見的未來肯定是 Swift + SwiftUI 的,這一目標早在 Chris 加入蘋果時就確定了。

如果你扒大眼睛仔細看看 Swift Evolution 的更新方向,會發現一切都是 Swift 大局中的一步棋,早有計劃,而且已經在一步步落實。

千萬不要只看眼前,也不要純聽信我說的,去思考一下 ,蘋果的大局究竟是什麼。

如果你想面向過去編程的話,2020 就從 OC 入手去當一顆優秀的螺絲。

可是,未來,是留給向前看的人的。

我建議:

向前看,不要回頭。

如果你想叫我寫適用於未來五年的 iOS 教程,可以加我的微信:caryota 並註明 iOS 教程。我會把你拉到一個群里,需求的人多的話我就會系統性的出個教程,帶你入門到把應用上架,並對應用上架後的宣傳等做出講解。

更新:

應大家的需求,課程已經開做咯!

邀請你也來將自己的想法變現,收穫睡後收入。不需要你掌握深奧的高數知識,也不需要編程背景。這份指南已系統性講解了獨立開發所需不同領域的知識。它包含:發現並驗證需求、設計原則、設計工具用法、創業技能、Swift 編程語言、Git 版本管理、SwiftUI 界面語言、系統框架解析、應用上架、推廣與商業化等。足夠你實現想法並將應用推廣給世界。

領取:現金優惠券

點擊試讀:獨立應用開發的完整流程

查看課程詳情:寫給新人的 iOS 獨立開發指南


其實,無所謂。

沒入門的時候感覺語言就是全部或者大部分。你學會了swift或者oc亦或者全會了就是會iOS開發么?。

大錯特錯!

告訴你iOS開發的日常:

三分之一時間是和產品較勁,需求,工作量評估,時間進度等等等等。

三分之一的時間是和測試較勁,各種bug,各種不是bug的bug,各種爭論是不是bug。

三分之一的時間用做開發。

開發的時間全部用來寫代碼嗎?

大錯特錯。

三分之一的時間跟後台較勁,各種業務邏輯,各種介面數據結構,確定下來。自己打樁寫好邏輯,發現後台不按套路來,不是code不對就是欄位名改了,要麼隨隨便便給你來一堆null。

三分之一的時間跟android較勁,關android什麼事?這個要看UI的手機型號,如果她用的是iOS,設計出來的東西很多都是iOS原生組件,iOS調用一句話的事,android的就要單獨開發組件,反之亦然。很多時候要協調兩端工作量。

剩下的時間可以安心寫代碼了嗎?理想情況下,是的。

如果遇到豬隊友,還要花很大一部分時間。(這個活久見的很多了,什麼用runtime去修改UILabel的原生方法,搞得一鍋label行為詭異。普通的網路請求亂用信號量,搞到線程死鎖。還有什麼非同步回調里遞歸自己,外面調用的時候一不小心,沒有長期持有self就會被釋放掉。等等這些因難雜症,哪個都能卡你半天)

不炫技,不過度封裝,不追求時尚,能用最簡單的,最普通的方式實現需求的,才是好的iOS開發,可惜不多。

剩下那點可憐的時間,才是你寫代碼的時間,這時候你想的都是:今天寫不完又要加班了。

現在進入正題,oc還是swift?

都要會!而且都要熟,無縫切換。否則稱不上合格的iOS開發。

至於先學哪個? oc!

oc入門簡單些。最小化的面相對象封裝,外加少量濃縮黑魔法。主要還是學面相對象吧,黑魔法駕馭不好容易坑隊友。

swift 現代語言的新特性加入了很多。有些很好,有些也比較坑。要懂得取捨,需要一定的基礎。

工程上哪個更好?

當然swift,因為它的開發速度比oc快的不是一星半點,類型推斷系統也會極大降低調試成本。


我是iOS開發菜狗一枚 ,2019年入行已經第六年。

我覺得語言語法都共通的啊。

lz之前有Java c基礎 ,學其他語言應該不難吧?

無非就是判斷 循環 類 屬性 繼承 方法 這類的。

我覺得學好iOS不在意哪門語言,框架和編程思想才是最重要的。

就比如:

你會Java你就會做後台嗎? 你不得學spring之類的框架嗎。

你會swift oc 就會寫iOS嗎? 你不得學CocoaTouch框架嗎。

同理不一定只有swift,oc能寫iOS啊 c++也可以啊

所以在我看來面向對象的編程語言都是互通的啊,會一種其他的看十天半個月的就會了呀!

如今答主會oc swift Java JS 幾種語言 做過後台 做過前端,編程做久了你就會發現,這些東西其實真的是差不多!

lz之前學過Java 那建議lz從swift開始學,swift是正統函數式語法,和市面上熱門語言都差不多。

oc是消息式語法,函數式寫久了的人看著這一坨會有些蛋疼。

oc已經基本淘汰了,但很多公司都在用,swift還不夠成熟,每一版本語法都有變動。

目前我們公司項目都是oc swift 混編的,這樣可以合理過度。

上個月剛把公司老項目拿swift 4.2重構了

有基礎的話語法應該學起來很快,重要的就是把CocoaTouch框架學好,多看看教程,多看看文檔。

編程不在意語言,培養編程思想很重要啊!!!

祝君如願!


你這如同49年加入國民黨。

19年了還學什麼移動端。當然學後端了。


謝邀。

目前來看,請按照objective-c→swift的進度來學習。swift在一些設定上是繼承objective-c的。所以先學objective-c是肯定的。

而且很多公司都是用objective-c來做的項目。也沒有遷移到swift的計劃。但是swift還是得會,畢竟會objective-c之後學swift的成本很低。

而且不光兩種語言,三種布局方式你最好也都要會,純代碼(大部分用masonry),xib,storyboard,這三種不同的公司有不同的要求。

最後,真心建議不要在這個時候入坑iOS了。培訓機構很少開iOS課。市場飽和,沒有新人,你拿什麼跟那些3年以上的老鳥競爭呢?


推薦閱讀:
相关文章