从Swift调用.h文件中定义的Objective-C函数

时间:2019-09-30 11:07:41

标签: objective-c swift

我想从Swift代码中调用this Objective-C 函数

this question上可接受的答案显示了如何在Swift中而不是函数中使用Objective-C 。其次,其中的Objective-C实现包含在 .m文件中,而我上面链接的是 .h文件。

从Swift调用.h文件中定义的Objective-C函数最简单的方法是什么?

1 个答案:

答案 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文件中,但这是不寻常的,这会使您的代码更容易出错并且更难以维护。