前言:
目前ios 开发swift语言开发势在必行, swift语言在国外的使用率已经过半, 纯OC开发者仅剩15%, https://mp.weixin.qq.com/s/0YBb9RKtvhJKLi5E9-8Cng 加之SwiftUI的推出后,可以实现苹果设备间的跨平台开发,以及类似SwiftWebUI的尝试
- 目前应该有不少的项目还是处于OC Swift混编的状态, 那么如何将这部分老的OC代码迁移至Swift版本?
1:重写(量大的话不太现实), 比较耗费精力和时间
2:使用工具(本片文章主要推荐的)
Swiftify
xcode可直接下载安装, <Swiftify for Xcode>下载安装后需要简单的配置方可使用:
- -系统偏好设置>"扩展"中为Xcode Source Editor(Xcode源码编辑器)选择"Swiftyfy for Xcode"
- 打开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)
}
转化失败提示:
选中代码转化成Swift快捷键配置
- 功能丰富, 分别针对工程文件,静态库文件,部分OC代码转化后OC Swift混编的处理, PCH的处理,Xib/Storyboard处理,被转化后的swift文件被其他OC文件引用的处理,'\n'字符串的出里,以及是否需要将使用的静态库转化成动态库的处理等
- 更新Xcode项目文件
- 更新Storyboard和XIB文件
- 更新桥接标题和PCH文件
- 将前向类声明添加到头文件
- 在转换后的文件顶部添加包含转换器版本号的标头
- 重新排序顶级声明(将全局变量声明放在顶部)
- 将“@objcMembers”属性添加到所有类声明中
- 将包含'\ n'的所有字符串转换为Swift中的多行字符串
- 将Xcode项目类型从“静态库”更改为“动态库”
- 始终使用完全限定的枚举值
- 使用默认值类型初始化没有初始值设定项的属性
- 始终在变量declerations中明确指定类型名称(从不推断类型名称)
- 在布尔属性中附加'is'前缀
- 忽略属性名称中不必要的单词
- 转换“受保护”Objective-C实例变量时要使用的访问修饰符
自动转化配置项
网页端转化链接:
没有文件大小限制, 但是需要来回粘贴
https://objectivec2swift.com/#/converter/code/
总结:
Swiftify还是很方便的, 有些的转化还是不能转化完全,需要手动修改,可以从工程中的基础类,工具类开始