objective-c - 当 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;
解决方案
看起来您正在尝试分配 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/
推荐阅读
- javascript - 如何在本机反应中仅显示来自firestore的登录用户的帖子?
- javascript - 请求的模块不提供名为 webpack? 的导出?
- excel - Laravel:使用 maatwebsite/excel 在导出 excel 中显示 html 输出而不是代码
- php - 无法在 GAE 上的 wordpress 永久链接中删除“index.php”
- angular - Angular Material 表中的内联编辑
- c# - 尽管引用了类型库,为什么 C# 在 COM 接口上使用后期绑定?
- mongodb - 如何使用 Mongoose 从查询中返回孙子属性?
- javascript - Tiny MCE 关闭 blob
- pytorch - 使用转换器 BertForQuestionAnswering 和 BertTokenizer 提取完整的句子
- javascript - Javascript递归函数获取键和值