学习 ios ( Swift ) 开发一个多礼拜的心得:入门到放弃

2019-07-31 09:41:08 +08:00
 xiangyuecn

学了一个多礼拜,看了 2 本书,毛都没写出来😂

主要是新入门,基础的功能都要从 0 开始写,够折腾的。不过还好蛮多 java 代码改改就能移植到 swift 里面。

遇到的几个问题吐槽一下:

  1. 粗略看了两本 swift ios app 的书,里面的内容感觉:原来写成这样的层次也可以出书(捂脸 。看完了官方的The Swift Programming Language LANGUAGE GUIDE,稍微浅显易懂了点,算有点价值吧

  2. 没有抽象类这个玩意,不知道怎么写子类必须实现某些方法,现在用一个父类加一个 protocol 接口组合起来当做抽象类,写着别扭。

  3. 遇到问题搜 10 篇文章,有 6 篇是抄的还不带格式,另外 3 篇在讲故事,剩 1 篇终于把问题解决了。

  4. 至今没找到怎么把任意对象转成字符串,比如:obj:AnyObject, 好希望有:obj.toString(),现在用的"\(obj)"有点丑。

  5. 一个方法注释里面明明说会引发异常,但方法并没有用 throws 把异常抛出来也没有其他措施,强制用 try 捕获会显示黄色警告,折磨死人。参考:FileHandle.write 往文件写数据这个方法,没任何返回值也没有抛任何异常,但注释说会引发异常,怕怕。也许是使用姿势不对😂

  6. xcode 项目那个文件虽然是文本,但几乎不是人工能编写的(有点反人类)。同样是新入门,Android Studio 的项目管理就没有这么难产。

慢慢积累吧,还好 swift 语法还算正常不用去写 oc ( oc 看起来像写甲骨文,学不动)。入门到放弃!但真放弃却是不可能的,慢慢磨吧。有大佬指点迷津就更好了😊

16202 次点击
所在节点    程序员
116 条回复
PanPancf
2019-07-31 10:30:10 +08:00
2. 要想让子类必须实现某些方法,可以通过 Base class 和 protocol 的组合来实现,也可以在父类实现里 fatalError,这样在你编码期间就可以保证发现没实现对应方法的子类。
4. var description {get}
5. 会 throw error 的函数签名里会有 throw 关键字
Aixtuz
2019-07-31 10:30:45 +08:00
抄的还不带格式,我猜测很可能是 CSDN。
zjddp
2019-07-31 10:32:40 +08:00
@34D 大佬能否放个 JD 看看?
xiangyuecn
2019-07-31 10:32:56 +08:00
@finab 不过 string 那个转换和直接"\(obj)"区别不大
PanPancf
2019-07-31 10:35:36 +08:00
Swift5 其实挺复杂了(虽然比不上 cpp 复杂哈哈哈),但学到够写一个 App 的程度并不困难,真正麻烦的是各种 framework API 的坑
CommandZi
2019-07-31 10:35:53 +08:00
protocol 还有 protocol 加上 extension、继承还有方法的 public 声明,已经覆盖 JAVA 里面的抽象类和接口的用途了
xiangyuecn
2019-07-31 10:40:09 +08:00
@PanPancf #21 子类的 17 楼的好些,刚查了一下 fatalError 是断言,这个是运行时检查吧,感觉如果测试时没有覆盖到所有方法还是会遗漏的。

5.这个主要是昨天用到了 FileHandle.write 这个函数,帖子里面有 api 文档链接,它说会引发异常,却似乎没有任何检测异常的手段。

4.我研究研究 description 这个属性。
MuscleOf2016
2019-07-31 10:42:18 +08:00
@liuyx7894 真的吗,写 js 的来写 swift 会很爽?
34D
2019-07-31 10:42:54 +08:00
@zjddp 最近在招有 iOS 逆向工程方面经验的工程师,来份简历呀.
finab
2019-07-31 10:44:14 +08:00
@xiangyuecn 是的,就是根据你的习惯,把所有的继承自 NSObject 的类扩展出 toString()方法,具体实现都看你需求

不过我平常用 "\()" 比较多,这个其实挺方便的
xiangyuecn
2019-07-31 10:45:02 +08:00
@PanPancf #25 哈哈,感谢,我研究研究 description 这个属性。
dawn009
2019-07-31 10:46:53 +08:00
几个新兴的强类型、编译型语言里面{Swift, Go, Rust}我一直感觉 Swift 的学习曲线最平滑。Rust 是悬崖状,Go 是锯齿状。
fghjghf
2019-07-31 11:02:53 +08:00
@34D 你怎么自己不去调查一下?你觉得你一家公司能代表这个市场吗?他没说错,移动端 iOS 市场行情最烂,毕竟人口红利没了。
PanPancf
2019-07-31 11:03:00 +08:00
@xiangyuecn #27
如果你 override 的方法是事件驱动的,那确实可能遗漏。
FileHandle.write 这个方法比较特别,文档说明里会抛异常,但不是 Swift 的 throw Error 形式,这个 API 有历史问题,你可以再搜索一下是为什么。
protocol 承担的其实就是 abstract class 的作用。( Swift 比 Java 优雅多了,Java 的 lambda 基本是个残废哈哈哈
cgpiao
2019-07-31 11:13:05 +08:00
我最不爽的是为什么方法签名那么长,都占了好几行了。
34D
2019-07-31 11:14:39 +08:00
@fghjghf 你怎么自己不去调查一下?移动端市场不景气,就代表现在学 iOS 找不到工作,你只能说机会没以前多了,以前 iOS 井喷式爆发本来就不合理,现在只是趋于正常。你牛逼你会找不到工作?菜就是菜。
wangleineo
2019-07-31 11:37:40 +08:00
最受不了 swift 设计者对于字符串 API 的执迷,改来改去的让人崩溃
xiangyuecn
2019-07-31 11:39:43 +08:00
@PanPancf #21 测试了一下 自定义对象、数字、字符串、bool 类型,放在[String:AnyObject]字典里面,obj.description 结果和`\(obj)`的结果是一样的。换成[String:Any]字典,Any 类型不支持 description,还是`\(obj)`比较万能些,现在不纠结用哪个了😁
xiangyuecn
2019-07-31 11:56:55 +08:00
@wangleineo #37 一堆方法吓死人,单 swift 5 的截取字符串功能就研究了 1 天时间也没学会怎么写,最后自己扩展了两个 Substr(1,1),Substring(1,2)进行统一,不存在跨语言的障碍,清净了不少。

做选择题是最轻松的,但选择一旦变多了可能就变成了填空题,条条大路通罗马并非一定是好事😎
blless
2019-07-31 12:00:54 +08:00
@dawn009 #32 为啥我觉得 go 还比较平滑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX