iOS在Swift中获取信号强度(核心电话)

我是iOS新手,正在学习使用Swift进行编码。 我的应用需要测量信号强度。 我发现这个代码在Objective-C / C上工作,需要一些帮助来实现在Swift上。 这是我得到的。 希望有人能帮我完成它。

目标C

int getSignalStrength() { void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY); int (*CTGetSignalStrength)(); CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength"); if( CTGetSignalStrength == NULL) NSLog(@"Could not find CTGetSignalStrength"); int result = CTGetSignalStrength(); dlclose(libHandle); return result; } 

迅速

  func getSignalStrength()->Int{ var result : Int! = 0 let libHandle = dlopen ("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTD_LAZY) ** help ** var CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength") if (CTGetSignalStrength != nil){ result = CTGetSignalStrength() } dlclose(libHandle) return result } 

不要使用dlopen来加载CoreTelephony。 在Swift文件的顶部使用import CoreTelephony 。 然后就像使用其他函数一样使用CTGetSignalStrength。

Swift 3解决scheme

 import CoreTelephony import Darwin static func getSignalStrength()->Int{ var result : Int = 0 //int CTGetSignalStrength(); let libHandle = dlopen ("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_NOW) let CTGetSignalStrength2 = dlsym(libHandle, "CTGetSignalStrength") typealias CFunction = @convention(c) () -> Int if (CTGetSignalStrength2 != nil) { let fun = unsafeBitCast(CTGetSignalStrength2!, to: CFunction.self) let result = fun() return result; print("!!!!result \(result)") } return -1 }