一份非常详尽的 Objective-C 到 Swift 的迁移指南

2018-06-04 08:49:34 +08:00
 pupboss

继上次重构代码删了 6 万多行,最近又把我们的项目用 Swift 重写了一遍,也收获不少经验,希望分享给大家

原文发表在我的博客:一份非常详尽的 Objective-C 到 Swift 的迁移指南

English version: A guidebook for migrating from Objective-C to Swift

因为 Swift 没有系统学过,之前没有做过商业项目,这几天参考了:《 Swift Apprentice 》《 Swift 必备 tips 》还有一些博客,主要参考了错误处理部分。

所以虽然改写成 Pure Swift 了,应该还是有不少缺陷,很多新特性没使用到,还请大家多多指正!

2750 次点击
所在节点    程序员
14 条回复
wohenyingyu03
2018-06-04 10:00:54 +08:00
然而好多项目还停留在 c/c++😂
pupboss
2018-06-04 10:24:33 +08:00
@wohenyingyu03 😂对,不过有些 c++ 项目迁移起来也不容易

收藏比回复多系列,哈哈
v2xeuser
2018-06-04 12:05:01 +08:00
4.0 的 swift 吗
pupboss
2018-06-04 12:56:47 +08:00
@v2xeuser 对的,环境是 Xcode9 Swift 4.0/4.1
MikeV2EX
2018-06-04 14:06:56 +08:00
战略性 mark
maxxfire
2018-06-04 14:08:45 +08:00
@pupboss 想请教个 swift 问题,遇到这样一个问题:
比如 NSString 有 2 个不同的 extentsion 扩展(特别是在引入第三库时,经常出现不同的库对 NSString 都做了扩展操作),那要如何才能引入具体某个呢,或者如何避免重复定义,导致编译出错?
感觉 swift 的命名空间在这方面解决不了什么问题,没什么用。
pupboss
2018-06-04 16:38:06 +08:00
两个 extension 是可以在一个项目里的啊...只要方法名不冲突

所以如果是源码方式引入第三方库,如果方法名冲突,要不就手动改改方法名?如果是用 Module 方式引入,swift 的命名空间还是会起作用的

可以参考这篇文章: http://swifter.tips/namespace/
@maxxfire
pupboss
2018-06-04 16:38:30 +08:00
@MikeV2EX 谢谢老哥捧场😁
ech0x
2018-06-04 17:21:06 +08:00
然后每年 wwdc 之后就有理由重构了😂
pupboss
2018-06-04 18:14:22 +08:00
@ech0x ……完蛋…… WWDC 前重构一次,今晚发布新版 Swift 又要重构了
renshaojuncool
2018-06-04 20:17:50 +08:00
马克。等 swift5.0 出来后,重写试试
0xcb
2018-06-05 07:57:36 +08:00
所以我选择混编😅
bloodspasm
2018-06-05 10:47:42 +08:00
混编+1 ,有 C 写的方法 Objective-C 和 Swift 貌似在二进制操作效率都太慢
pupboss
2018-06-05 13:43:22 +08:00
@renshaojuncool 可以可以,5.0 出来之后我来这里 append 一下要注意的坑

@0xcb 有强迫症的路过。。。只想用纯 swift

@bloodspasm 写过 C++ 和 OC 的混编,感觉效率还行,我们是处理音频的,对性能要求也算是不低了

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

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

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

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

© 2021 V2EX