OC与Swift的相互调用

OC调用Swift方法

1、在 Build Settings 搜索 Packaging ,设置 Defines Module 为 YES

2、新建 LottieBridge.swift 文件,自动生成桥 ProductName-Bridging-Header.h

3、在 LottieBridge.swift 中,定义Swift类继承于OC类,声明 @objcMembers 或 @objc ,实现相关方法

Swift 复制代码
import UIKit
import Lottie

// 所有方法/属性声明
@objcMembers class MyLottieView: UIView {
    private let animationView = LottieAnimationView()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.addSubview(animationView)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        animationView.frame = self.bounds
    }

    public func setLottieFromURL(_ url: URL?) {
        if let url = url {
            LottieAnimation.loadedFrom(url: url) { [weak self] (animation) in
                self?.animationView.animation = animation
            }
        }
    }

    public func play() {
        animationView.play()
    }
}

// 单个方法/属性声明
@objc class MyLottieView: UIView {
    private let animationView = LottieAnimationView()

    override init(frame: CGRect) {...}

    override func layoutSubviews() {...}

    @objc public func setLottieFromURL(_ url: URL?) {...}

    @objc public func play() {...}
}

4、在OC代码中引用 ProductName-Swift.h ,调用Swift相关方法

objectivec 复制代码
#import "ProductName-Swift.h"

- (void)swiftTest {
    MyLottieView *lottieView = [[MyLottieView alloc] initWithFrame:CGRectMake(100, 100, 320, 320)];
    [self.view addSubview:lottieView];
    
    NSURL *url = [NSURL URLWithString:@"https://assets9.lottiefiles.com/packages/lf20_N0y2Nj.json"];
    [lottieView setLottieFromURL:url];
    
    [lottieView play];
}

Swift调用OC方法

1、在 ProductName-Bridging-Header.h 中加入OC的头声明

objectivec 复制代码
#import <YYKit/YYKit.h>
#import <AFNetworking/AFNetworking.h>

2、在Swift代码中调用OC的相关方法

Swift 复制代码
private func OCTest() {
    let configuration = URLSessionConfiguration.default
    _ = AFURLSessionManager(sessionConfiguration: configuration)
}
相关推荐
调试人生的显微镜2 小时前
iOS开发入门:Interface Builder、基础控件及UITextField详解
后端·ios
茶底世界之下8 小时前
动态切换 nearest / linear 时,为什么不能只替换 sampler
ios·swift
应用市场11 小时前
把旧 Pixel 变成相册备份中转站(上):Mac 到安卓的照片传输工具设计——流式上传、sha256 校验、adb forward 与 Bonjour
android·macos·adb·kotlin·swift
东坡肘子13 小时前
Swift Server,又多了一个 Google -- 肘子的 Swift 周报 #156
人工智能·swiftui·swift
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
打工仔折腾 AI1 天前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
茶底世界之下1 天前
视频预览切换为何会闪回旧帧:用 generation + mode identity 管住异步回调
ios·swift
老李IT笔记2 天前
从备份恢复会把管理状态带回来吗:iOS 27 之后答案变了|MDM.Plus
ios·智能手机
谢亮_vipxieliang2 天前
Go 接口设计原则核心知识点
开发语言·ios·golang