V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pupboss
V2EX  ›  程序员

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

  •  
  •   pupboss ·
    pupboss · 2018-06-04 08:49:34 +08:00 · 2741 次点击
    这是一个创建于 2146 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    14 条回复    2018-06-05 13:43:22 +08:00
    wohenyingyu03
        1
    wohenyingyu03  
       2018-06-04 10:00:54 +08:00
    然而好多项目还停留在 c/c++😂
    pupboss
        2
    pupboss  
    OP
       2018-06-04 10:24:33 +08:00
    @wohenyingyu03 😂对,不过有些 c++ 项目迁移起来也不容易

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

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

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

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

    @bloodspasm 写过 C++ 和 OC 的混编,感觉效率还行,我们是处理音频的,对性能要求也算是不低了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2850 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 13:52 · PVG 21:52 · LAX 06:52 · JFK 09:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.