gpt4 book ai didi

ios - 在 SWIFT 中转换 ObjectiveC 表达式

转载 作者:行者123 更新时间:2023-11-29 02:34:46 29 4
gpt4 key购买 nike

我正在实现一个简单的应用程序,它将从 Google map 下载数据,并在 map 上显示这些数据。我实现了所有代码以从 Google 获取此信息,现在我正在尝试实现解码多段线的方法。我用 ObjectiveC 编写了以下方法:

-(NSMutableArray *)decodePolyLine:(NSString *)encodedStr {
NSMutableString *encoded = [[NSMutableString alloc] initWithCapacity:[encodedStr length]];
[encoded appendString:encodedStr];
[encoded replaceOccurrencesOfString:@"\\\\" withString:@"\\"
options:NSLiteralSearch
range:NSMakeRange(0, [encoded length])];
NSInteger len = [encoded length];
NSInteger index = 0;
NSMutableArray *array = [[NSMutableArray alloc] init];
NSInteger lat=0;
NSInteger lng=0;
while (index < len) {
NSInteger b;
NSInteger shift = 0;
NSInteger result = 0;
do {
b = [encoded characterAtIndex:index++] - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
NSInteger dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = [encoded characterAtIndex:index++] - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
NSInteger dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));
lng += dlng;
NSNumber *latitude = [[NSNumber alloc] initWithFloat:lat * 1e-5];
NSNumber *longitude = [[NSNumber alloc] initWithFloat:lng * 1e-5];

CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]];
[array addObject:location];
}

return array;
}

现在我正尝试在 SWIFT 中实现此方法,但我在以下指令中遇到问题:NSInteger dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));,我试过这样写:

var dlng: NSInteger = (result & 1) ? ~(结果 >> 1) : (结果 >> 1)

但是 Xcode 告诉我:Type 'Int' does not conform to protocol 'BooleanType'我不知道如何解决这个问题,有人可以帮我解决这个问题吗?

最佳答案

问题出在这里:

(result & 1)

在 Objective-C 中,整数可以用作 bool 表达式,其中 0 对应于 false,任何不同于零的值都是 true。在这种特定情况下,如果最右边的位为 1,则为真,否则为假。

在swift中,逻辑表达式必须是boolean类型,所以你需要做的就是将它转换成如下形式:

(result & 1) > 0

更新:由于在这种情况下您处理的是 NSInteger,它可以有正值和负值,也许最好从这个角度考虑,并使用“不同于零”而不是“大于零”:

(result & 1) != 0

关于ios - 在 SWIFT 中转换 ObjectiveC 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484060/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com