iOS OC与Swift文件相互调用

在OC工程中接入纯swift二方库时二方库开发者提供了swift开发代码示例,因此如何在本项目的OC工程中引入swift文件并引用成为了现在面临的一个问题。(本博客未记录OC工程引入swift打包编译阶段需修改的内容)

1. OC工程中引入swift文件并调用

1. podspec文件中增加对应二方库及 修改source_files,确保新增的swift文件可以pod之后引入到工程中。代码示例:

复制代码
source_files = '**/Overseas/**/*.{h,m,mm,c,swift}','**/Common/**/*.{h,m,mm,c,swift}'

2. 增加swift文件及相关逻辑

脱敏后文件框架:

swift 复制代码
//
//
//  Created by hanhaonan on 2024/2/6.
//

import Foundation

public class SomeIntegration : NSObject {
	let someService : ObjectService
	//对象实例化时自动调用
    public override init() {
        someService = ****
    }
    
    @objc
    public func updateStatus(value0: String, value1: Int, value2: String) {
    	****
        someService.updateStatus(param0: value0, param1: value1, param2: value2)
    }
}

3. OC文件中调用Swift代码

OC 复制代码
//***表示模块名称
#import "***-Swift.h"

	//实例初始化
	SomeIntegration* consentService = [[SomeIntegration alloc] init];
	//updateStatus方法调用
 	[someService updateStatusWithvalue0: consentKey1 value1:0 value2:@"check_box"];
 

4. Swift文件中引入OC功能

新增 模块名称-Bridging-Header.h文件,后续Swift将通过该文件作为乔阶层调用OC代码。

复制代码
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import <SDKCoreKit/NetworkManager.h>
#import <SDKCoreKit/SDKURLConfig.h>

5. Swift文件中调用OC逻辑

Swift文件在调用OC相关逻辑时无需再次进行头文件引入,sync之后乔阶层中OC头文件中相关方法可以直接在引用处调用。例如:

复制代码
public class SomeNetworkManager: ObjectNetworkManager {
    
    public func requestJSON(path: String,
                            method: String,
                            params: [String : Any]?,
                            completion: (([String: Any]?, Error?) -> Void)?) {
        var logID: String
        let url = URLConfig.sharedInstance().getSDKUrl+path
        
        var params = params;
        params?["**"] = "***";
        if(method == "GET"){
            NetworkManager.shareInstance().getTaskForJSON(withURL: url, headers: headers as! [AnyHashable : Any], params: params as! [AnyHashable : Any], callback: { error, jsonObj in
                if ((error == nil)) {
                    var dic = jsonObj as! [String : Any];
                    completion?(dic as! [String : Any], nil)
                } else {
                    completion?(nil, error)
                }
            })
        } else {
            NetworkManager.shareInstance().postTaskForJSON(withURL: url, headers: headers as! [AnyHashable : Any], params: params as! [AnyHashable : Any], callback: { error, jsonObj in
                if ((error == nil)) {
                    var dic = jsonObj;
                    completion?(dic as! [String : Any], nil)
                } else {
                    completion?(nil, error)
                }
            })
        }
    }
}
相关推荐
夏天的峰没有风25 分钟前
Typora+gitcode+picgo搭建免费图床
开发语言·ios·swift
库奇噜啦呼29 分钟前
【iOS】源码学习-分类、扩展、关联对象
学习·ios·分类
帅次14 小时前
Android 17 开发者实战:核心更新与应用场景落地指南
android·java·ios·android studio·iphone·android jetpack·webview
人月神话Lee15 小时前
【图像处理】Core Image 与 GPU 渲染管线——让滤镜飞起来
ios·ai编程·图像识别
帅次21 小时前
讯飞与腾讯云:Android 实时语音识别服务对比选择
android·ios·微信小程序·小程序·android studio·android runtime
择势1 天前
用一套View代码,同时支持RTL和LTR布局混合排版
ios
游戏开发爱好者81 天前
iOS开发工具推荐:Xcode、AppCode、SwiftLint使用心得与效率提升
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
2501_915909061 天前
深入理解HTTPS中间人抓包技术原理与实战指南
网络协议·http·ios·小程序·https·uni-app·iphone
择势2 天前
基于声网 Agora RTM + RTC SDK 实现 iOS 语音聊天室 —— 常见问题汇总 & 解决方案手册
ios
择势2 天前
基于声网 Agora RTM + RTC SDK 实现 iOS 语音聊天室(进阶封装)
ios