https://www.jianshu.com/p/4799ac1d7dce

2017.06.02 23:55* 字数 275 阅读 1619评论 0喜欢 3

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

环境:xcode 8.3.2

系统: MAC OX

方法:使用桥接文件进行桥接,进行使用。

具体过程

本文以现今比较流行的AFNetworking作为例子。现今只有OC库。

pod的安装不再阐述。

1️⃣创建一个示例工程:TestAFNetWorkingInSwift

2️⃣进入项目的根目录,使用命令pod init初始化一个Profile文件,并做如下配置:

#使用3.1.0版本

platform :ios, '8.0'

 

target 'TestAFNetWorkingInSwift' do

  use_frameworks!

  pod 'AFNetworking', '~> 3.1.0'

  

  target 'TestAFNetWorkingInSwiftTests' do

    inherit! :search_paths

    pod 'AFNetworking', '~> 3.1.0'

  end

  

  target 'TestAFNetWorkingInSwiftUITests' do

    inherit! :search_paths

    pod 'AFNetworking', '~> 3.1.0'

  end

end

3️⃣在项目根目录使用命令pod install安装第三方库。

创建桥接文件,本文不再阐述,具体请查看我的文章:

swift和OC的互相调用

在桥接文件中import第三方库的.h文件即可。

特别注意:

在桥接头文件中有两种方式引入第三方库

使用时请先编译一下工程,否则可能导致无法import

方法1️⃣:

//在头文件中使用如下引入:

#import <AFNetworking/AFNetworking.h>

当使用以上引入方式时,使用时必须import AFNetworking

import UIKit

import AFNetworking

 

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

 

    var window: UIWindow?

 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        let _: AFURLSessionManager = AFURLSessionManager.init(sessionConfiguration: URLSessionConfiguration.default)

        return true

    }

方法2️⃣:

//在头文件中使用如下引入:

@import AFNetworking;

使用以上方式引入时,可以不需要import

import UIKit

 

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

 

    var window: UIWindow?

 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        let _: AFURLSessionManager = AFURLSessionManager.init(sessionConfiguration: URLSessionConfiguration.default)

        return true

    }

 

 

 

swift和OC的互相调用

swift工程中调用OC语言的库

创建swift工程

 
在swift调用OC的第三方库 随笔 第1张 在swift调用OC的第三方库 随笔 第2张 image.png

情况1️⃣(自动创建桥接文件的情况)

创建一个OC的语言文件

 
在swift调用OC的第三方库 随笔 第3张 在swift调用OC的第三方库 随笔 第4张 image.png

系统提示是否需要一个桥接头文件,因为系统的暂时还没有。选择创建。

桥接头文件

此时自动创建了桥接头文件

 
在swift调用OC的第三方库 随笔 第5张 在swift调用OC的第三方库 随笔 第6张 image.png

(但是其中文件是空的。)

在其中引入需要桥接的OC文件。


在swift调用OC的第三方库 随笔 第7张  在swift调用OC的第三方库 随笔 第8张 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+NiOS->Source->Header File文件。这个文件的命名规则最好是:"项目名+bridging+Header.h"


在swift调用OC的第三方库 随笔 第9张  在swift调用OC的第三方库 随笔 第10张 image.png

手动设置路劲

Swift Compiler - Code Generation->Objective-C Bridging Header,填写“项目名/桥接文件名”。

也可以直接将文件拖入。

OC工程中调用swift语言

创建一个OC项目

 
在swift调用OC的第三方库 随笔 第11张 在swift调用OC的第三方库 随笔 第12张 image.png

创建swift文件


在swift调用OC的第三方库 随笔 第13张  在swift调用OC的第三方库 随笔 第14张 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变为下划线_)



作者:Better_奔
链接:https://www.jianshu.com/p/7ee9cb2acccf
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄