• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

在swift调用OC的第三方库

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swiftclass与struct区别发布时间:2022-07-13
下一篇:
Swift—UITextField的基本用法发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap