有一定的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年以上的老鸟竞争呢?


推荐阅读:
相关文章