import swift to objective-c
简介
因为swift没有头文件,ojbc加载时xcode可以自动为swift类分配头文件
项目中调用
引用swift相关header到任意同target下的.m/.mm文件中
#import "项目名-Swift.h"
在组建中使用
#import <ProductName/ProductModuleName-Swift.h>
在obj-c中声明swift类和协议
在header中设置
@class MySwiftClass;
@protocol MySwiftProtocol;
注意事项:
- [可选] objc header中加不加@class来提前声明swift类型都可以,取决于.h是否对swift类型有需求
- [必须] 要被调用的swift类型,必须基于NSObject
- [必须] swift文件中的类和方法如果要被
target-Swift.h
自动编译并被objc访问就必须在修饰符前添加@objc
和public
修饰符 - [必须] swift对象的创建:
SObj* obj = [[SObj alloc]init];
SObj* obj = [SObj new];
- [可选] 除非需要swift调用objc类,否则不必创建
target-Bridging-Header.h
,当然如果系统自动创建了,也别多此一举删掉它 - [必须]
@objc public func test(path:String)
swift方法调用的时候使用方法:
SObj* obj = [[SObj alloc]init];
[obj testWithPath:@"string"];
不使用
@objc
会导致无法自动生成swift header,导致objc找不到swift类型,会提示类似Use of undeclared identifier '类名'
的错误