iOS 开发 30 天速成心得

2017-06-25

4月30号(51天前)找工作找得苦,闲极之下注册成了苹果的开发者。刨掉玩 Safari 插件的一个礼拜和跟父母出去玩的俩礼拜,算到今天 (6月20号) 应用上架 App Store 只有三十天的时间,基本上是 “一个月从零学习 iOS 开发” 的经典范本了……

马拉松般跑下来还是想分享一些心得和体会。如果要拆开的话,整个学习的过程大概是 Swift、Xcode、美工和 App Store 审核这四个方面。Swift 和 Xcode 上手是要学习的,美工对于独立开发来说完全是各凭本事,App Store 审核就是一个见招拆招的过程了,也没有太多可说的。所以值得讲的大概就这么几点——

Swift 很简单

Swift 应该是我学过的最简单、最容易上手也是用起来最舒服的编程语言。如果你有面向对象编程语言的基础 (Python、JavaScript 或者 R 等),Swift 的语法逻辑很多和这些语言相似,迁移起来也就没什么难度。如果现在让我从零学习 Objective-C 我觉得我大概是没有耐心了,但是有了 Swift 作为开发的第一步,iOS 开发门槛低了一大截。

在此之上,Swift 还有一些特性和语法结构,也解决了一些原来在玩 Python 时遇上的困难。

比如 Type Safety。在 Swift 里,大部分写错的代码能在 buildtime 编译的时候被 Xcode 直接挑出来,不用再到 runtime 运行的时候再去报错 debug。因为 Swift 知道你的每一个变量都是什么类型,也会在代码中不断比较这些类型是否匹配。

比如 guard 语法,执行许多步骤的逻辑检查时可以不用一层套一层地摞代码,而是按照顺序把出错的地方挡出去就好了。所以一个有着四层判断逻辑的代码本来应该是这样:

func someRandomFunction() 
    if ------ {
        if ------ {
            if ------ {
                if ------ {
                    doSomething()
                }
            }
        }
    }
}

有了 guard 语法,它可以变成这样:

func someRandomFunction() {
    guard ------ else {return}
    guard ------ else {return}
    guard ------ else {return}
    guard ------ else {return}
    doSomething()
}

所以逻辑层数多的时候,你可以在 Swift 里保持代码的美观(其实看着顺眼非常重要),也能让代码逻辑和头脑中的思维逻辑保持一致。

再比如 Optional 变量,能让你安全引用未赋值的变量,不会直接崩掉。配合 if 或者 guard 语句,你可以在 Swift 里灵活地处理错误:

if let i = getAnOptionalInt() {
    return index[i]
} else {
    return index[0]
}

类似的特性大概还有不少,只是我想不起来了……有些事语言的特性,有些是 Xcode 编译时的功能和照顾;总之这些特性让 Swift 比 Python 用起来舒服了不知道多少倍,也省掉了许多 debug 花掉的时间。

关于怎么学

从 Swift 基础到 Xcode 入门,我都是使用了 Lynda.com 的视频教程。这些教程全部来自经验丰富的专业讲师和业内人士,他们知道你会遇上什么问题,课程内容也是手把手教你做一个东西出来,因此这些课程跟下来效果很好。也是顺便提一下,如果你需要入门一些技术类的东西,从 Lynda.com 里找视频资源比从 YouTube 上瞎翻的效果好了不知道多少倍,一并推荐给大家。

至于度过了新手阶段、大概熟悉流程之后,Lynda.com 的作用就不那么大了。如果你已经明白该怎么用正确的词汇语言描述自己遇到的问题,还是 Stackoverflow 要更实用一些。

最后,Swift 确实还是一个新的语言,每年一个新版本语法都多少有些不一样。但是好在 Xcode 对 Swift 跨版本做了兼容和支持,因此你从网上找到的 Swift 2.1 语法的范例,拷贝到 Xcode 里也能正常使用——Xcode 会提示你那些语法被替换掉了,基本上也都是一键迁移。

Next steps

这周开始上!班!了!是一个统计码农职位。所以这个 app 先挂着,等着微博官方核审完就可以下载随便用1,但是短期没啥时间更新了。

WWDC 上苹果宣布了 iOS 11 的 Machine Learning 功能,我觉得还挺有意思的,现在非常手痒地想要学习 NLP 自然语言处理,正好能把学到的统计知识用上。

ReadOnly 这个 app 打算在 1.x 阶段只做一个安安静静的微博阅读器,这点 feature 根本不好意思收钱。2.x 可能会在业余时间学一些 Machine Learning 和 CoreML 模块的用法。我的想法是希望能够用这个 app 自动发现微博时间流中的热点话题,能够把时间流里 200 多条的内容总结成一个扫一眼就明白的概览——这个 flag 立得很大,就慢慢玩了。做得不好权当学习,做得好没准就飞黄腾达了呢!


  1. 已经审核通过了,欢迎下载使用——6月23日 ↩︎