iOS OC与Swift文件相互调用

打印 上一主题 下一主题

主题 818|帖子 818|积分 2454

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

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

  1. source_files = '**/Overseas/**/*.{h,m,mm,c,swift}','**/Common/**/*.{h,m,mm,c,swift}'
复制代码
2. 增加swift文件及相关逻辑

脱敏后文件框架:
  1. //
  2. //
  3. //  Created by hanhaonan on 2024/2/6.
  4. //
  5. import Foundation
  6. public class SomeIntegration : NSObject {
  7.         let someService : ObjectService
  8.         //对象实例化时自动调用
  9.     public override init() {
  10.         someService = ****
  11.     }
  12.    
  13.     @objc
  14.     public func updateStatus(value0: String, value1: Int, value2: String) {
  15.             ****
  16.         someService.updateStatus(param0: value0, param1: value1, param2: value2)
  17.     }
  18. }
复制代码
3. OC文件中调用Swift代码

  1. //***表示模块名称
  2. #import "***-Swift.h"
  3.         //实例初始化
  4.         SomeIntegration* consentService = [[SomeIntegration alloc] init];
  5.         //updateStatus方法调用
  6.         [someService updateStatusWithvalue0: consentKey1 value1:0 value2:@"check_box"];
复制代码
4. Swift文件中引入OC功能

新增 模块名称-Bridging-Header.h文件,后续Swift将通过该文件作为乔阶级调用OC代码。
  1. //
  2. //  Use this file to import your target's public headers that you would like to expose to Swift.
  3. //
  4. #import <SDKCoreKit/NetworkManager.h>
  5. #import <SDKCoreKit/SDKURLConfig.h>
复制代码
5. Swift文件中调用OC逻辑

Swift文件在调用OC相关逻辑时无需再次进行头文件引入,sync之后乔阶级中OC头文件中相关方法可以直接在引用处调用。例如:
  1. public class SomeNetworkManager: ObjectNetworkManager {
  2.    
  3.     public func requestJSON(path: String,
  4.                             method: String,
  5.                             params: [String : Any]?,
  6.                             completion: (([String: Any]?, Error?) -> Void)?) {
  7.         var logID: String
  8.         let url = URLConfig.sharedInstance().getSDKUrl+path
  9.         
  10.         var params = params;
  11.         params?["**"] = "***";
  12.         if(method == "GET"){
  13.             NetworkManager.shareInstance().getTaskForJSON(withURL: url, headers: headers as! [AnyHashable : Any], params: params as! [AnyHashable : Any], callback: { error, jsonObj in
  14.                 if ((error == nil)) {
  15.                     var dic = jsonObj as! [String : Any];
  16.                     completion?(dic as! [String : Any], nil)
  17.                 } else {
  18.                     completion?(nil, error)
  19.                 }
  20.             })
  21.         } else {
  22.             NetworkManager.shareInstance().postTaskForJSON(withURL: url, headers: headers as! [AnyHashable : Any], params: params as! [AnyHashable : Any], callback: { error, jsonObj in
  23.                 if ((error == nil)) {
  24.                     var dic = jsonObj;
  25.                     completion?(dic as! [String : Any], nil)
  26.                 } else {
  27.                     completion?(nil, error)
  28.                 }
  29.             })
  30.         }
  31.     }
  32. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表