swift和OC的互相调用
2017-06-02 本文已影响604人
Better_奔
swift工程中调用OC语言的库
创建swift工程
image.png情况1️⃣(自动创建桥接文件的情况)
创建一个OC的语言文件
image.png系统提示是否需要一个桥接头文件,因为系统的暂时还没有。选择创建。
桥接头文件
此时自动创建了桥接头文件
image.png(但是其中文件是空的。)
在其中引入需要桥接的OC文件。
image.png(使用两种引入都行,选择其中一种)
可以在swift中直接调用了
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let obj : NewObject=NewObject.init()
return true
}
(这样创建桥接文件,系统里已经帮我们设置好了路径。检查这个路径:工程->TARGETS
, 在输入框里输入bridging,你会看桥接路径)
情况2️⃣(手动创建桥接文件的情况)
手动创建一个.h文件(名字固定)
创建一个,Command+N
。iOS
->Source
->Header File
文件。这个文件的命名规则最好是:"项目名+bridging+Header.h"
手动设置路劲
Swift Compiler - Code Generation
->Objective-C Bridging Header
,填写“项目名/桥接文件名”。
也可以直接将文件拖入。
OC工程中调用swift语言
创建一个OC项目
image.png创建swift文件
image.png(此时依旧会问是否创建头文件)
在OC中使用swift
只需要引入头文件即可
#import "AppDelegate.h"
#import "OC中调用swift-swift.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NewObject*obj=[[NewObject alloc]init];
return YES;
}
#import "OC中调用swift-swift.h"
其中OC中调用swift
是项目名字-Swift.h
是固定写法。(其中项目名中如果有中划线-
在import
变为下划线_
)