iOS получает силу сигнала в Swift (базовая телефония)
Я новичок в iOS и учусь программировать с помощью Swift. Мое приложение должно измерять силу сигнала. Я обнаружил, что этот код работает на Objective-C/C, и мне нужна помощь для реализации на Swift. Вот что я получил. Надеюсь, кто-нибудь поможет мне закончить это.
ЦЕЛЬ С
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
}
2 ответа
Не используйте dlopen для загрузки CoreTelephony. использование import CoreTelephony
в верхней части вашего файла Swift. Затем просто используйте 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
}