IOS 07 Swift调用OC源码及OC第三方框架

一、Swift调用OC源码

实现的效果

创建SwiftUseOCTest项目,是一个Swift语言的项目;再创建一个OC类文件,里面有静态方法,实例方法,字段等;然后在Swift项目中调用OC类;像OC类的复杂宏,在Swift类中是无法调用。

实现方法

1.创建OC类文件,编写简单OC类属性方法等;

2.自动生成桥接文件;

3.在桥接文件(可以自动创建,也可以手动创建)中引用OC相关头文件,当前项目的OC,第三方框架的OC都要引用;

4.在Swift类文件中调用OC类属于和方法。

创建OC类

创建TestOCObject OC语言类文件,并继承自 NSObject

点击Next后,会弹窗提示自动创建桥接文件

编写TestOCObject.h ,声明属于和方法

//
//  TestOCObject.h
//  SwiftUseOCTest
//
//  Created by jin on 2024/8/18.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

//普通宏,可以在Siwft中访问
#define ICON_WIDTH 1228

//复杂宏
#define SCEREEN_WIDTH [[UIScreen mainScreen] bounds].size.width

//这是一个常量
static NSString * const ICON_NAME = @"sziitjin";

@interface TestOCObject : NSObject

@property (strong,nonatomic) NSString *var1;

/// 静态登录方法
/// @param name <#name description#>
/// @param age <#age description#>
+(NSString *)loginWithName:(NSString *)name age:(int)age;

/// 登录方法
/// @param name <#name description#>
/// @param age <#age description#>
-(NSString *)login11WithName:(NSString *)name age:(int)age;

@end

NS_ASSUME_NONNULL_END

编写TestOCObject.m ,实现属于和方法

//
//  TestOCObject.m
//  SwiftUseOCTest
//
//  Created by jin on 2024/8/18.
//

#import "TestOCObject.h"

@implementation TestOCObject

- (instancetype)init{
    self = [super init];

    if (self) {
        _var1 = [NSString stringWithFormat:@"%@ %@",@"这是变量1",ICON_NAME];
    }
    return self;
}

+ (NSString *)loginWithName:(NSString *)name age:(int)age{
    return [NSString stringWithFormat:@"TestObject static loginWithName %@ %d",name,age];
}

- (NSString *)login11WithName:(NSString *)name age:(int)age{
    return [NSString stringWithFormat:@"TestObject login11WithName %@ %d",name,age];
}

@end

编译一下项目,保证编写的OC类没有问题。

导入头文件

在桥接文件SwiftUseOCTest-Bridging-Header.h 中导入 TestOCObject OC类

//导入OC头文件,当前项目的,第三方框架的都要导入
#import "TestOCObject.h"

使用OC类

在Swift类文件 ViewController 中调用OC类属于和方法

//
//  ViewController.swift
//  SwiftUseOCTest
//
//  Created by jin on 2024/8/18.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //调用OC类中的静态方法
        var result = TestOCObject.login(withName: "jin", age: 18)
        print(result)
        
        //调用OC类中的实例方法
        let testObject = TestOCObject()
        result = testObject.login11(withName: "jin", age: 16)
        print(result)

        //-------------字段
        print("变量:\(testObject.var1)")
        print("常量:\(ICON_NAME)")

        //-------------宏,只能访问普通的宏,复杂的宏不能访问
        print("简单宏:\(ICON_WIDTH)")
        //print("访问复杂宏:\(SCEREEN_WIDTH)")
    }


}

查看log,成功实现在Swift类文件中调用OC类的属性和方法。

二、Swift调用OC第三方框架

如何实现

通过Pod安装依赖,然后在桥接文件中导入头文件,然后就可以使用了。

添加依赖

例如这里使用微信SDK作为演示,目前微信SDK是OC实现了:

#微信sdk,OC实现的
#https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
pod 'WechatOpenSDK'

安装依赖。还不了解如何使用 CocoaPods 管理依赖的,建议先看前面的文章:IOS 01 CocoaPods 安装与使用

在桥接文件中导入

SwiftUseOCTest-Bridging-Header.h

//微信SDK
#import <WechatOpenSDK/WXApi.h>

 使用OC三方框架

在Swift类文件 ViewController 中调用OC第三方框架微信的方法WXApi.registerApp("", universalLink: "")

//
//  ViewController.swift
//  SwiftUseOCTest
//
//  Created by jin on 2024/8/18.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //调用OC类中的静态方法
        var result = TestOCObject.login(withName: "jin", age: 18)
        print(result)
        
        //调用OC类中的实例方法
        let testObject = TestOCObject()
        result = testObject.login11(withName: "jin", age: 16)
        print(result)

        //-------------字段
        print("变量:\(testObject.var1)")
        print("常量:\(ICON_NAME)")

        //-------------宏,只能访问普通的宏,复杂的宏不能访问
        print("简单宏:\(ICON_WIDTH)")
        //print("访问复杂宏:\(SCEREEN_WIDTH)")
        
        WXApi.registerApp("", universalLink: "")
    }


}

能正常打开微信SDK的OC源码和项目运行成功,代表已成功在Swift代码中使用 OC第三方框架

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sziitjin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值