我是iOS新手,正在学习用Swift编程。我的应用程序需要测量信号强度。我发现这个代码在Objective-C/C上工作,需要一些帮助来实现Swift。这是我得到的。希望有人能帮我完成它。
OBJECTIVE - 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来加载coreelephony。在Swift文件的顶部使用import CoreTelephony
。然后像使用其他函数一样使用CTGetSignalStrength。
Swift 3 Solution
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
}