当前swift正在逐步开始流行,我们也需要与时俱进,但是在项目中又不可能已下载把所有代码进行替换,这就存在了混编的必然性。对于swift和OC的混编,我说一些自己认为需要注意的地方。
- 可选类型:swift中最经典的用法,需要注意的就是如果使用了!,一定不能够为nil,否则将会crash;OC转换时一般会为了简单,把成员变量的类型定义为!,那么一定要注意使用该变量时不可以为空。
-
相互引用:OC引用swift的类,需要在swift的类定义时添加@objc,同时在.m文件中包含swift的对应头文件(
productName-swift.h
),这样才可以正常使用;而swift引用OC的类,需要在bridge文件中包含对应的头文件,然后就可以在swift中调用。 - 宏定义:OC中的宏定义,在swift中一部分可以正常使用,也有很大一部分无法再正常使用,具体的可以参见OC&swift中的宏定义一文。
-
数据类型:OC中的所有对象都是一个指针,所以都可以进行强制转换,在swift中将不再允许这种使用;还有就是在swift中数字类型之间将不再进行隐式转换,都需要开发者手动进行显式的转换。
在swift中使用let定义常量时可以推断类型,如果要设置为特定类型的话,还是需要添加数据类型,这一点和OC中的宏不同。比如要定义长度为44,一定要使用let height:CGFloat = 44
,而不能够使用let height = 44
,因为后者将会把height推断为Int类型,导致后面使用的时候无法正常使用。 -
成员(函数)可见性:在swift中,不存在头文件,所以在类中声明的成员和函数都默认是外部可见的,如果需要定义内部的变量和函数,需要使用
private
关键字。 - delegate:单独说delegate是因为delegate一般会定义为weak类型,而在swift中由于不使用strong关键字,容易让我们忽略了使用weak,导致循环引用。注意在swift中同样存在weak的使用,在定义delegate时不要忘记添加。
- struct:swift中的struct在OC中没有对应的数据类型,如果不是必须的话,不建议在接口的地方使用struct。
-
初始化方法:swift中对于
UIViewController
,UIView
等类非继承的初始化方法,都是用convenience
关键字,否则需要重新实现父类的初始化方法。
目前想到就这几点吧。