首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Eddystone信标-寻找NamespaceID中的问题

iOS Eddystone信标-寻找NamespaceID中的问题
EN

Stack Overflow用户
提问于 2019-06-18 13:17:03
回答 1查看 168关注 0票数 0

我在Objective中有一个老项目-- C。我需要在最新的SWIFT-5中转换它。除了Eddystone信标探测之外,一切都很正常。

旧目标C代码,

代码语言:javascript
复制
-(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

信标ID长度: 16

次级数据:

命名空间: a457ae5727fa30f48dc9

我的快速代码,

代码语言:javascript
复制
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

信标ID长度: 16

子数据: 10字节

命名空间:10字节

========================================

我面临着获取命名空间的问题。因为你可以从上面的输出中看到。数据正在以字节为单位在我的Swift代码中转换。我不知道该怎么处理。目标C代码工作得很好。任何帮助都是非常感谢的!谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 10:08:01

这就是解决办法,在我的情况下是有效的。

在此张贴答案,帮助那些可能面临同样问题的人。希望它能对某人有所帮助!

代码语言:javascript
复制
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.hexEncodedString())".replacingOccurrences(of: "<", with: "")
            namespace = namespace?.replacingOccurrences(of: ">", with: "")
            namespace = namespace?.replacingOccurrences(of: " ", with: "")
            print("namespace : \(namespace ?? "")")
            return namespace
        }
        return ""
    }

func hexEncodedString(options: HexEncodingOptions = []) -> String {
        let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx"
        return map { String(format: format, $0) }.joined()
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56650096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档