繁体   English   中英

如何从 Swift 语言访问 Objective-C 类方法

[英]How to access an Objective-C class method from Swift language

在我的 Swift 应用程序中,我需要从 Objective-C 访问一个名为weibo()的类方法,如下所示

@interface Weibo : NSObject
+ (Weibo*)weibo;
@end

我已经配置了桥接头并尝试了以下语句

let w = Weibo.weibo() as Weibo

它不起作用。

更新:我已经分叉了 repo并修复了这个问题,如下所示。

let w = Weibo.getWeibo() as Weibo // the method has been changed.

没用的原因是Swift对待+ (Weibo*)weibo; 作为一个方便的构造函数。 由于weibo与班级名称Weibo weibo相同,但大小写不同。 我需要将名称更改为getWeibo以解决此问题以支持 Swift。

感谢每一位为这个答案做出贡献的人。 特别感谢@Anil 和@David

杰克

+ (Weibo*)weibo; 是你的类Weibo的类方法。 你可以像这样快速访问它

let w:Weibo = Weibo.weibo()

但是当我尝试时它给了我错误( 'weibo' is unavailable: use object construction 'Weibo()' )可能是因为方法名称和类名称相同。 当我更改方法名称时出错

let w:Weibo = Weibo.getWeibo() // works: method name changed

那是一个类方法而不是一个属性。

所以你会像访问它一样......

let w = Weibo.weibo()

... 我认为。

类型将被推断,但你可以这样做......

let w:Weibo = Weibo.weibo() as Weibo

我相信,它仍然有效。

我通过更改代码遇到了同样的问题

+(instancetype _Nonnull)manager;

你应该像这样改变它

@property(nonatomic, class, strong, readonly) CKKNetManager *_Nonnull manager;

然后你可以像这样调用Swift

CKKNetManager.manager.get(kGetCompanyInfo, success: {[unowned self] (obj) in

        self.hideEmptyView()
        self.info = CKKCorpInfo.init(dictionary: obj as! [String : AnyObject])
    }) {[unowned self]  (errorString) in

        self.showEmptyView(in: self.view, with: EmptyViewType.pageLoadFailed)
    }

在我的情况下,我的 Obj-c 类方法返回了一个指向未添加到桥接头的新类的指针,因此编译器没有使该类方法可访问。

您需要将具有要调用的类方法的类和类方法描述中的任何类包含在桥接头中。

如果有人遇到与我过去相同的问题,我无法从 swift 访问该函数的原因是它缺少 .h(头文件)文件中的函数声明。 所以它只在 .m 文件中,不能从我的 swift 文件中访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM