У меня есть один старый проект в Objective-C. Мне нужно преобразовать его в последний Swift-5. Все работает нормально, кроме обнаружения маяков Eddystone.
Старый код Objective C,
-(NSString *) findNameSpace : (id) beaconInfo {
ESSBeaconInfo *beacon = beaconInfo;
ESSBeaconID *Bid = beacon.beaconID;
NSLog(@"Beacon : %@", beacon);
NSLog(@"Beacon ID Length : %lu",(unsigned long)Bid.beaconID.length);
if (Bid.beaconID.length == 16) {
NSData *d1 = [Bid.beaconID subdataWithRange:NSMakeRange(0, 10)];
NSLog(@"Sub Data : %@", d1);
NSString *namespace = [[NSString stringWithFormat:@"%@",d1] stringByReplacingOccurrencesOfString:@"<" withString:@""];
namespace = [namespace stringByReplacingOccurrencesOfString:@">" withString:@""];
namespace = [namespace stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"namespace : %@", namespace);
return namespace;
}
return @"";
}
Вывод: -
Маяк: Eddystone, id: ESSBeaconID: beaconID = , RSSI: -65, txPower: -31
Длина идентификатора маяка: 16
пространство имен: a457ae5727fa30f48dc9
Мой код Swift
func findNameSpace(_ beaconInfo: Any) -> String? {
let beacon: ESSBeaconInfo = beaconInfo as! ESSBeaconInfo
let Bid: ESSBeaconID = beacon.beaconID
print("Beacon : \(beacon)")
print("Beacon ID Length : \(Bid.beaconID.count)")
if Bid.beaconID.count == 16 {
let d1 = Bid.beaconID.subdata(in: Range(NSRange(location: 0, length: 10))!)
print("Sub Data : \(d1)")
var namespace: String? = nil
namespace = "\(d1)".replacingOccurrences(of: "<", with: "")
namespace = namespace?.replacingOccurrences(of: ">", with: "")
namespace = namespace?.replacingOccurrences(of: " ", with: "")
print("namespace : \(namespace ?? "")")
return namespace
}
return ""
}
Вывод: -
Маяк: Eddystone, id: ESSBeaconID: beaconID = , RSSI: -51, txPower: -31
Длина идентификатора маяка: 16
Дополнительные данные: 10 байт
пространство имен: 10 байт
========================================
У меня проблема с получением пространства имен ... потому что вы можете видеть результат выше. В моем Swift Code данные конвертируются в байты. Я понятия не имею, как с этим справиться. Код Objective C работает отлично. Любая помощь приветствуется! Спасибо.
Data
. Если вы хотите получить более значимый отпечаток в качестве Objective-C, сделайтеprint(d1 as NSData)
. Но очевидно, чтоstringByReplacingOccurrencesOfString:
убирать пробелы ‹и› из описания объектаNSData
было плохой практикой с самого начала. Вместо этого используйте это: stackoverflow.com/questions/39075043/ - person Larme   schedule 18.06.2019