【发布时间】:2019-11-10 22:44:10
【问题描述】:
在 Stack Overflow 中,我看到了找到最近信标 (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;
}
}
请在我做错的地方完善我。
【问题讨论】:
-
您需要在循环之前的某个时间点为
closest设置一个值,否则它将始终为nil而if永远不会为真 -
@P4yam,我已批准您的编辑,但请参阅我的后续编辑以了解如何进行正确的代码格式化。
-
我认为您可以使用
max(by:)找到具有最大值的信标,并将其与您保存的信标进行比较(如果存在)进行设置。
标签: ios objective-c clbeacon