在Objective-C中使用RSSI每秒查找最近的信标

时间:2019-06-29 07:55:27

标签: ios objective-c clbeacon

在堆栈溢出中,我看到了寻找最接近的信标(Swift find closest Beacon by rssi)的答案。

在这里,我尝试准确地找到了Objective-C中最接近的东西。我的应用每秒钟发现一次信标,表明时间精度无法正常工作。正如他所说,RSSI将每1秒更新一次。因此,我想使用RSSI筛选最接近的信标。我将您的Swift代码转换为Objective-C,但无法正常工作。

这是Swift代码:

//Swift code
var closestBeacon: CLBeacon? = nil
for beacon in beacons {
    if beacon.rssi < 0 && closestBeacon != nil && beacon.rssi > closestBeacon!.rssi {
        closestBeacon = beacon as? CLBeacon
    }
}

这是我转换的Objective-C代码不起作用:

CLBeacon *closest = nil;

for (CLBeacon *beacon in beacons) {

    if (beacon.rssi < 0 &&  closest != nil && beacon.rssi > closest.rssi) {

        closest = beacon;

    }
}

请在这里把我弄错了。

1 个答案:

答案 0 :(得分:0)

在两个版本的代码中都有一个错误,如@ paulw11所建议。由于我是为了回答另一个问题而写此错误的,因此这里是一个修复程序:

迅速

var closestBeacon: CLBeacon? = nil
for beacon in beacons {
    if closestBeacon == nil || beacon.rssi < 0 && beacon.rssi > closestBeacon!.rssi {
        closestBeacon = beacon as? CLBeacon
    }
}

Objective-C

CLBeacon *closestBeacon = nil;

for (CLBeacon *beacon in beacons) {

    if (closestBeacon == nil || beacon.rssi < 0 && beacon.rssi > closest.rssi) {

        closestBeacon = beacon;

    }
}

我也修复了原始帖子中的错误。