首页 > 解决方案 > 当 Swift 变量更改时,它不会在 Objective C 类中更新

问题描述

我是 Swift 的新手,我知道我在这里遇到的问题是完全不了解如何在类之间传输数据。

我有一个 Swift 类,其 isRecording bool 最初设置为 false。当我按下我的应用程序上的录制按钮时,isRecording 设置为 true。

我想在目标 c 类中使用 isRecording。我可以访问该变量并能够将其打印出来。问题是当 isRecording 在 swift 类中设置为 true 时,它​​在目标 c 类中仍然为 false。当按下按钮时,如何让 isRecording 更新。

迅捷类:

class SessionHandler : NSObject, AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureMetadataOutputObjectsDelegate {

 @objc public var isRecording = false

目标C类

#import "DlibTester-Swift.h"
SessionHandler *session = [[SessionHandler alloc]init];



//....
    cout << "isRecording is " << session.isRecording << endl;

标签: objective-cswiftswift4

解决方案


看起来您正在尝试分配 SessionHandler 的新实例,而不是请求在 Swift 中分配的已分配 SessionHandler 实例。

找到你在 Swift 中声明和实例化 SessionHandler 的位置,并确保你有一个 @objc 可访问的函数或变量来从 Objective-C 访问它。无论你做什么,都不要从 Objective-C 创建一个新的 SessionHander 实例,否则它们肯定不会是相同的值。


编辑:单身...

如果您可以保证在整个项目中只有一个 SessionHandler,您可能需要研究如何定义和使用 Singleton。这样您就可以在 Objective-C 中执行 [SessionHandler sharedHandler].isRecording,并将其用作 Swift 中的 SessionHandler.sharedHandler。参考:https ://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift/


推荐阅读