我无法从 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'的已知实例
答案 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继承。