1、新建一个object-c 工程,创建一个Person.swift类


2、点击Don't Create,忽略创建桥接头文件。因为oc调用swift,swift只有.m实现文件,不需要导入头文件。此时oc和swift的混编,oc是通过访问一个特殊的宏来访问swift的。
3、创建一个工程后,默认swift的访问是通过一个如下的头文件

这个头文件的名字默认是工程名+ "-" 如图就是test-swift.h
文件名字是可以自己修改的,如下swift.h

4、导入swift的模块宏文件

5、编写swift暴漏给objects


-
1、只有继承NSObject的类才能被oc访问,不继承NSObject的纯swift类不能被 oc所访问。另外默认Swift中的类的访问权限是fileprivate,所以要想被OC访问到Swift中的类也必须public修饰。
-
2、只有被@objec修饰的方法和属性对于oc才是可见的,才能被访问。另外Swift中的方法和属性的访问权限默认是fileprivate,这时OC访问它们时,对于对象来说这些属性和方法是私有的,只能通过kvc访问私有属性,只能通过performSelector访问私有方法。为了使对象能够直接访问它们,属性和方法用public修饰。
-
3、用@objcMembers直接修饰在class前面,系统会自自动给class对象的属性、方法前面添加@objec来表明它们是可以被OC访问的。
6、oc调用swift
屏幕快照 2019-01-08 下午3.31.01.png
网友评论