• 在swift调用OC的第三方库


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

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

    环境: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工程

     
    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+NiOS->Source->Header File文件。这个文件的命名规则最好是:"项目名+bridging+Header.h"


     
    image.png

    手动设置路劲

    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变为下划线_)



    作者:Better_奔
    链接:https://www.jianshu.com/p/7ee9cb2acccf
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    聚合支付里各扫码支付的返回报文样例
    短信平台接口安全控制
    「美团外卖APP签约快捷支付」流程体验
    多模块项目提示“Module ** must not contain source root **. The root already belongs to module **”的解决办法
    比较两种方式的form请求提交
    Linux screen命令和系统日志
    Linux 守护进程
    Linux 进程的通信方式与信号:kill命令
    Linux 进程的控制与进程之间的关系
    Linux 使用ps和top命令查看进程
  • 原文地址:https://www.cnblogs.com/sundaysme/p/10668670.html
Copyright © 2020-2023  润新知