iOS - 无法从Objective-C访问Swift Singleton

时间:2017-10-26 08:53:06

标签: ios objective-c swift singleton swift4

我无法从 Objective-C ViewController访问我的 Swift Singleton类

Xcode确实识别我的Swift类,它构建,所以我不认为这是一个桥接头问题。

这是我的Swift Singleton类:

@objc class MySingleton : NSObject {

    static let shared = MySingleton()

    private override init() {}
}

然后在我的 .m 文件中导入此标题:

#import "myProject-Swift.h"

以这种方式使用Singleton:

 MySingleton *testSingleton = [MySingleton shared];

或者这样:

[MySingleton shared];

它确实识别MySingleton类类型,但我无法访问此类的任何函数或属性。

我错过了什么?所有类似的帖子都没有帮助。

编辑:我做了一个测试功能

func testPrint() {
   print("Singleton worked")
}

并在objective-c文件中以这种方式调用它:

[[MySingleton shared] testPrint];
  

没有选择器'testPrint'的已知实例

3 个答案:

答案 0 :(得分:6)

在Swift Singleton类中,为方法@objc添加testPrint(),如:

@objc func testPrint() {
   print("Singleton worked")
}

现在,您可以从Objective-C类访问该方法:

[[MySingleton shared] testPrint];

答案 1 :(得分:0)

@objc函数之前使用testPrint()属性。参考documentation

  

要在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须标记为@objc。

答案 2 :(得分:0)

您需要将@objc添加到要公开给Objective-C的任何属性或函数,包括静态共享属性:

class MySingleton : NSObject {

    @objc static let shared = MySingleton()
    private override init() { }
    @objc func testPrint() { print("Singleton worked") }

}

然后,从Objective-C文件中调用:

MySingleton *singleton = [MySingleton shared];
[singleton testPrint];

请注意,将整个类标记为@objc不能替代上述内容。实际上不再需要它了,它足以从NSObject继承。