0

在 Stack Overflow 中,我看到了找到最接近信标的答案(Swift find nearest Beacon by rssi)。

在这里,我尝试准确地在 Objective-C 中找到最接近的。我的应用程序每秒钟都会发现信标,因为时间精度无法正常找到最接近的位置。正如他所说,RSSI 将每 1 秒更新一次。所以我想使用 RSSI 过滤最近的信标。我将您的 Swift 代码转换为 Objective-C,但它不能正常工作。

这是斯威夫特代码:

//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;

    }
}

在这里,请让我在我做错的地方完美。

4

1 回答 1

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;

    }
}

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

于 2019-06-29T15:29:52.770 回答