Objective-C 迁移 Swift 4.x / 5.x

前言:

目前ios 开发swift语言开发势在必行, swift语言在国外的使用率已经过半, 纯OC开发者仅剩15%, https://mp.weixin.qq.com/s/0YBb9RKtvhJKLi5E9-8Cng 加之SwiftUI的推出后,可以实现苹果设备间的跨平台开发,以及类似SwiftWebUI的尝试

  • 目前应该有不少的项目还是处于OC Swift混编的状态, 那么如何将这部分老的OC代码迁移至Swift版本?
    1:重写(量大的话不太现实), 比较耗费精力和时间
    2:使用工具(本片文章主要推荐的)

Swiftify

xcode可直接下载安装, 下载安装后需要简单的配置方可使用:

  1. -系统偏好设置>"扩展"中为Xcode Source Editor(Xcode源码编辑器)选择"Swiftyfy for Xcode"
  2. 打开Xcode > Editor > 菜单下看到新的"Swiftify"子菜单

这里有三个选项:

  • 1: Convert Selection to Swift(将选中的代码块转化成Swift)
  • 2:Convert File to Swift(将文件转化成swift语言)
  • 3:Paste as Swift (以Swift方式粘贴代码)

不同注册用户代码转化有大小限制:

  • 未注册用户: 1KB/每次 大概也就100代码不到吧
  • 注册未付费用户: 2KB/每次

转化示例

原OC代码:

- (NSInteger)zp_TextAlignment{
    
    NSNumber * number = objc_getAssociatedObject(self,@selector(zp_TextAlignment));
    return number.integerValue;
}
- (void)setZp_TextAlignment:(NSInteger)TextAlignment{
    
    objc_setAssociatedObject(self, @selector(zp_TextAlignment), 
@(TextAlignment), OBJC_ASSOCIATION_COPY_NONATOMIC);
}

转化后swift代码:

@objc func zp_TextAlignment() -> Int {

    let number = objc_getAssociatedObject(self, #selector(zp_TextAlignment))
    return number.intValue
}

func setZp_TextAlignment(_ TextAlignment: Int) {

    objc_setAssociatedObject(self, #selector(zp_TextAlignment), NSNumber(value: TextAlignment), 
objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC)
}

转化失败提示:

意思是您需要付钱了.png

选中代码转化成Swift快捷键配置

快捷键配置

自动转化配置项介绍

  • 功能丰富, 分别针对工程文件,静态库文件,部分OC代码转化后OC Swift混编的处理, PCH的处理,Xib/Storyboard处理,被转化后的swift文件被其他OC文件引用的处理,'\n'字符串的出里,以及是否需要将使用的静态库转化成动态库的处理等
  • 更新Xcode项目文件
  • 更新Storyboard和XIB文件
  • 更新桥接标题和PCH文件
  • 将前向类声明添加到头文件
  • 在转换后的文件顶部添加包含转换器版本号的标头
  • 重新排序顶级声明(将全局变量声明放在顶部)
  • 将“@objcMembers”属性添加到所有类声明中
  • 将包含'\ n'的所有字符串转换为Swift中的多行字符串
  • 将Xcode项目类型从“静态库”更改为“动态库”
  • 始终使用完全限定的枚举值
  • 使用默认值类型初始化没有初始值设定项的属性
  • 始终在变量declerations中明确指定类型名称(从不推断类型名称)
  • 在布尔属性中附加'is'前缀
  • 忽略属性名称中不必要的单词
  • 转换“受保护”Objective-C实例变量时要使用的访问修饰符

自动转化配置项

image.png

网页端转化链接:

没有文件大小限制, 但是需要来回粘贴
https://objectivec2swift.com/#/converter/code/

转化示例

总结:

Swiftify还是很方便的, 有些的转化还是不能转化完全,需要手动修改,可以从工程中的基础类,工具类开始

你可能感兴趣的:(Objective-C 迁移 Swift 4.x / 5.x)