Background
我是 iOS 开发的新手,为了学习而玩 Swift。 作为一个小挑战,我正在尝试获取设备当前连接到的网络的SSID。
这在使用Objective-C的Stack上得到了很好的覆盖:例如,iPhone在没有私人库的情况下获得SSID。但是Objective-C/Swift的舞蹈给我带来了一些概念上的挑战。
具体来说,建议的解决方案(在上面的链接帖子中讨论(是调用函数CNCopyCurrentNetworkInfo()
- 但是,根据Apple的文档,这个函数在Swift中不可用。
迄今
我已经包含(我认为正确(SystemConfiguration.framework
,将其添加到项目的链接框架和库中。 我还使用 import SystemConfiguration
将其引入视图控制器。
问题
- 我是否还需要使用
import SystemConfiguration
,或者由于将框架包含在我的项目中而已经完成? -
有没有另一种/更好的方法来包含
SystemConfiguration
库? -
最重要的一点是:导入所需的库后,如何从库中调用 Objective-C 函数?
谢谢!
这不是直接回答你的问题,但它是你问题的答案。在这种情况下,您可以快速完成所有操作。
导入库后,
import SystemConfiguration.CaptiveNetwork
您可以立即致电:
CNCopySupportedInterfaces()
它会起作用。在 Xcode 6.3.2 中确认。
Apple 的互操作性书籍(来自了解 Swift 导入过程(:
任何可作为模块访问的Objective-C框架(或C库( 可以直接导入到 Swift 中。这包括所有 Objective-C 系统框架——如 Foundation、UIKit 和 SpriteKit——以及随系统提供的通用 C 库。
关于您的具体问题:
-
情况正好相反:您不需要手动包含Apple的框架。Xcode 会自动为您提供有效的
import
语句(例如在您的情况下import SystemConfiguration
(,甚至 - 或者更确切地说:尤其是在操场上! -
同上。。。
-
鉴于上述 import 语句,
SystemConfiguration
确实是导入的,因为您可以调用其函数(例如SCCopyLastError() // --> __NSCFError
( 并访问其常量(例如kCFErrorDomainSystemConfiguration // --> com.apple.SystemConfiguration
(。不幸的是,CaptiveNetwork
似乎没有随它一起导入(例如CNCopySupportedInterfaces() // --> Use of unresolved identifier
(。
但是,您应该能够在 Objective C 端使用此框架,只需从 Swift 调用您自己的包装器函数即可。你只需要记住将它们包含在桥接标头中列出的导入中(有关桥接标头的更多信息,请参阅同一项目中的 Swift 和 Objective-C(。