我想从Swift代码中调用this Objective-C 函数。
在this question上可接受的答案显示了如何在Swift中而不是函数中使用Objective-C 类。其次,其中的Objective-C实现包含在 .m文件中,而我上面链接的是 .h文件。
从Swift调用.h文件中定义的Objective-C函数最简单的方法是什么?
答案 0 :(得分:0)
首先,如注释中所述,您将需要执行所有常规步骤来使用Swift中的Objective-C类(桥接标头等),然后就已经可以调用函数了,需要一些调整以使其在Swift中更可用。
func CopyLaunchedApplicationsInFrontToBackOrder_Swift() -> [[String: AnyObject]]? {
guard let cfarray = CopyLaunchedApplicationsInFrontToBackOrder() else {
return nil
}
let array = unsafeBitCast(cfarray, to: NSArray.self) as [AnyObject]
guard let result = array as? [[String: AnyObject]] else {
return nil
}
return result
}
如果您的函数是在.h文件中实现的,则最好将实现转移到相应的.m文件中,而仅将其声明保留在.h中。
@import Foundation;
CFArrayRef CopyLaunchedApplicationsInFrontToBackOrder(void);
也可以将该声明放入桥接头中,并将实现保留在.h文件中,但这是不寻常的,这会使您的代码更容易出错并且更难以维护。