背景
我是iOS开发的新手,为了学习而玩Swift。作为一个小小的挑战,我试图获取设备当前连接的网络的SSID。
这是Stack上使用Objective-C的完全覆盖的基础:iPhone get SSID without private library,例如......但是Objective-C / Swift舞蹈给我带来了一些概念上的挑战。
具体来说,建议的解决方案(在上面链接的帖子中讨论)是调用函数CNCopyCurrentNetworkInfo()
- 但是,根据Apple's documentation,此函数在Swift中不可用。
到目前为止
我已将(我认为正确)SystemConfiguration.framework
添加到项目的链接框架和库中。我还使用import SystemConfiguration
将其带入了View Controller。
问题
import SystemConfiguration
,或者由于将框架包含在我的项目中而已经完成了?是否有其他/更好的方式来包含SystemConfiguration
库?
最重要的:如果导入了所需的库,您是否从库中调用Objective-C函数?
谢谢!
答案 0 :(得分:6)
我知道这不是直接回答你的问题,但它是你问题的答案。 在你的情况下,你可以迅速完成所有事情。
导入库后
import SystemConfiguration.CaptiveNetwork
您可以立即致电:
CNCopySupportedInterfaces()
它会起作用。 在Xcode 6.3.2中确认。
答案 1 :(得分:2)
Apple的互操作性书(来自Understanding the Swift Import Process):
任何可作为模块访问的Objective-C框架(或C库) 可以直接导入Swift。这包括所有的 Objective-C系统框架 - 例如Foundation,UIKit和 SpriteKit以及随系统提供的通用C库。
关于您的具体问题:
情况恰恰相反:您不需要手动包含Apple的框架。给定有效的import
声明(例如您的import SystemConfiguration
),Xcode会自动为您提供这些声明,甚至 - 或者更确切地说: - 在操场上!
...同上
鉴于上述导入语句,SystemConfiguration
确实已导入,因为您可以调用其函数(例如SCCopyLastError() // --> __NSCFError
)并访问其常量(例如kCFErrorDomainSystemConfiguration // --> com.apple.SystemConfiguration
)。遗憾的是,CaptiveNetwork
似乎未随其导入(例如CNCopySupportedInterfaces() // --> Use of unresolved identifier
)。