Swift:如何使用链接库中的 Objective-C 函数



Background

我是 iOS 开发的新手,为了学习而玩 Swift。 作为一个小挑战,我正在尝试获取设备当前连接到的网络的SSID。

这在使用Objective-C的Stack上得到了很好的覆盖:例如,iPhone在没有私人库的情况下获得SSID。但是Objective-C/Swift的舞蹈给我带来了一些概念上的挑战。

具体来说,建议的解决方案(在上面的链接帖子中讨论(是调用函数CNCopyCurrentNetworkInfo() - 但是,根据Apple的文档,这个函数在Swift中不可用。

迄今

我已经包含(我认为正确(SystemConfiguration.framework,将其添加到项目的链接框架和库中。 我还使用 import SystemConfiguration 将其引入视图控制器。

问题

  1. 我是否还需要使用 import SystemConfiguration ,或者由于将框架包含在我的项目中而已经完成?
  2. 有没有另一种/更好的方法来包含SystemConfiguration库?

  3. 最重要的一点是:导入所需的库后,如何从库中调用 Objective-C 函数?

谢谢!

我知道

这不是直接回答你的问题,但它是你问题的答案。在这种情况下,您可以快速完成所有操作。

导入库后,

import SystemConfiguration.CaptiveNetwork

您可以立即致电:

CNCopySupportedInterfaces()

它会起作用。在 Xcode 6.3.2 中确认。

Apple 的互操作性书籍(来自了解 Swift 导入过程(:

任何可作为模块访问的Objective-C框架(或C库( 可以直接导入到 Swift 中。这包括所有 Objective-C 系统框架——如 Foundation、UIKit 和 SpriteKit——以及随系统提供的通用 C 库。

关于您的具体问题:

  1. 情况正好相反:您不需要手动包含Apple的框架。Xcode 会自动为您提供有效的 import 语句(例如在您的情况下import SystemConfiguration(,甚至 - 或者更确切地说:尤其是在操场上!

  2. 同上。。。

  3. 鉴于上述 import 语句,SystemConfiguration 确实是导入的,因为您可以调用其函数(例如 SCCopyLastError() // --> __NSCFError ( 并访问其常量(例如 kCFErrorDomainSystemConfiguration // --> com.apple.SystemConfiguration(。不幸的是,CaptiveNetwork似乎没有随它一起导入(例如 CNCopySupportedInterfaces() // --> Use of unresolved identifier(。

但是,您应该能够在 Objective C 端使用此框架,只需从 Swift 调用您自己的包装器函数即可。你只需要记住将它们包含在桥接标头中列出的导入中(有关桥接标头的更多信息,请参阅同一项目中的 Swift 和 Objective-C(。

最新更新