objective-c - 在 Objective-C 项目中的 Swift 文件中使用 Objective-C Singleton
问题描述
我的项目是用Objective-C编写的。我正在学习桥接。
我成功地将Swift桥接到了我的Objective-C项目中。我在Objective-C VC和Swift VC之间做了一些VC推送。一切都按预期进行。
但是,我在我的Swift文件中创建了对我的Objective-C NetworkManager的引用(我使用了单例模式),如下所示:
let networkManager = NetworkManager.sharedManager()
出于某种原因,我不能使用它的方法。
networkManager.getUserInfo() // .getUserInfo() will not appear!
只是为了向您展示我是如何将我的 NetworkManager 创建为单例的。我在网上找到了那个解决方案,它已经很老了,如果你有更好的解决方案,我很乐意得到一些见解:
+ (id)sharedManager {
static NetworkManager *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;
}
-(id)init {
if (self = [super init]) {
someProperty = @"Default Property Value";
self.cache = [[NSCache alloc] init];
}
return self;
}
不知道这里有什么问题。谢谢大家的帮助。
解决方案
对于那些可能在未来寻找答案的人。
有人建议我在与 Swift 桥接时不要使用 id 类型。我改变了:
+ (id)sharedManager {
至
+ (NetworkManager *)sharedManager
现在一切正常。
推荐阅读
- reactjs - 使用 useContext 时错误对象不可迭代(无法读取属性 Symbol(Symbol.iterator))
- javascript - 我无法解密我的文本,但我可以加密有人可以检查我的代码吗
- flutter - 错误:必须先分配不可为空的局部变量“newTaskTitle”,然后才能使用它
- java - Jackson JSONGenerator 添加换行符、反斜杠等,并且不按格式化顺序显示给定内容
- php - 通过使用从 JQuery DatePicker 选择的开始日期和结束日期之间的日期比较日期,从 Access 中获取数据
- git - Android Studio 中的 .idea/shelf/Uncommitted_changes_before_Update
- android - 如何在具有 wrap_content 高度的图像视图上添加文本视图覆盖
- flutter - Flutter 卡片布局与设计
- java - 如何通过正则表达式中的字符将字符串拆分为子字符串
- odata - 我正在尝试使用 ODATA 查询表(MYSQL)。但是具有浮点值的长度字段返回 null