同社は公式にswift言語を使用して1年以上プロジェクトを開発してきましたが、今ではswiftとOCがお互いに電話をかけた経験を要約しています。
迅速にOCに電話
- SwiftはOCクラスを呼び出します。ブリッジファイルが必要であり、OCクラスの.hファイルをブリッジファイルにインポートする必要があります。
1.ファイルを作成し"工程名称"-Bridging-Header.h
ます
- 新しいプロジェクトを作成すると、ブリッジファイルSwiftTestProject(プロジェクト名)-Bridging-Header.hを作成するように自動的に求められます。このファイルは、迅速にOCを呼び出すために必要です。
ブリッジファイルを作成する
-
ファイルを作成するために新しいプロジェクトがチェックされていない場合は、
-Bridging - Header.h
手動で"工程名称"-Bridging-Header.h
ファイルを作成し、ヘッダーファイルファイルを作成する必要があります。一般的には、という名前で“项目名-Bridging-header”
、コンテンツを空にします。 -
次に、プロジェクトを設定し
TARGET -> Build Settings -> Objective-C Bridging Header
ます。ファイル名を入力します。"工程名称"-Bridging-Header.h
-
プロジェクトファイルの下で
TARGETS --> Build settings
中程度のDefines Module
検索を見つけて、次のように設定しますYES
2. OCの.hヘッダーファイルを導入することにより、相対的なOCクラスをswiftプロジェクトで呼び出すことができます。
ocは迅速に呼び出します
1.プロジェクト構成
TARGETS -->Build settings
プロジェクトファイルの下で中間Product Module Name
検索を見つけてプロジェクト名に設定すると、プロジェクトは自動的に"项目名"-Swift.h
ファイルを作成します。プロジェクトは「SwiftTestProject-Swift.h」で、このファイルはocがswiftファイルを呼び出すために使用されます。デフォルトでは表示されません。
2."项目名"-Swift.h
ファイルを
OCファイル#import "项目名称-Swift.h"
では、このファイルにはプロンプトがないことに注意してください。手動で入力する必要があります。そうすれば、OCクラスでswiftクラスを使用できます。
メモとまとめ
-
ocはswiftファイルを参照して「プロジェクト名-Swift.h」ファイルを参照します。手動で入力する必要があります。プロンプトは表示されません。swiftはocファイルを参照してブリッジファイルを作成します。ocの.hファイルはで参照されます。ブリッジファイル。
-
OCはswiftを呼び出すことに注意してください。swfitのクラスは、注意を払う必要があります。
- 特别注意
OC调用Swift中的Class类
- 这个类必须是继承
NSObjec
或者NSObjec
的子类 - Class前面要加
@objcMembers
(这个关键字是让该类所有属性和方法加上@objc
),3.0之前是苹果自动帮你加上的,据说嫌弃打包会偏大一些,后面改成自己手动加。 例如:
@objcMembers class CustomServiceTool: NSObject {}
复制代码
- 类中的协议、枚举、结构体这些东西的调用
- 协议:直接在前面加一个
@objc
@objc protocol CustomServiceToolDelegate: NSObjectProtocol {}
复制代码
- 枚举:必须定义出
Int
类型,前面加@objc
才能调用(毕竟swift的枚举比OC强大太多)
@objc enum CPLineType: Int {
case schoolToHome = 0
case homeToSchool
case return
}
复制代码
- 结构体:在oc中是不能调用struct里面的内容的,你想在类似class前面加个@objc的方法加在struct前面是不行的,那但是我们又想在oc中调用struct的属性,那怎么办呢?我们只能再建一个类,在类里写个方法来返回struct中的值
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)
坑点:
-
每次在一个类前面加个
@objcMembers
的时候都需要重新编译一遍才能打出提示(混编期间,报错请不要怀疑自己的代码,大部分编译一下就没事了。。。) -
有种特殊的情况,比如我一个OC控制器中调用了swift写的view,然后其他用swift写的控制器需要调用OC控制器,这时候要是只是把OC控制器写到桥接文件中是会报错的。(这种就是混编项目比较变态的情况)------------解决办法:swift写的View用向前声明( @class BannerView);
-
swift中的一些类型是OC没有的,或者类型名字差不多但是类型完全不同 例如: swift中的Int定义成可选类型的时候,这时候OC是调不了swift的Int类型,解决方式,定义普通Int型