首页 > 解决方案 > 在 Objective-C 项目中的 Swift 文件中使用 Objective-C Singleton

问题描述

我的项目是用Objective-C编写的。我正在学习桥接。

我成功地将Swift桥接到了我的Objective-C项目中。我在Objective-C VCSwift 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;
}

不知道这里有什么问题。谢谢大家的帮助。

标签: objective-cobjective-c-swift-bridge

解决方案


对于那些可能在未来寻找答案的人。

有人建议我在与 Swift 桥接时不要使用 id 类型。我改变了:

+ (id)sharedManager {

+ (NetworkManager *)sharedManager

现在一切正常。


推荐阅读