ios开发新手,求教。。
尝试使用CLGeocoder解析一个addressArray并依次添加到一个MapItemArray中,代码如下:
[self getAddress];
int m=0;
while (m<self.addressArray.count){
NSString *address=self.addressArray[m];
NSLog(@"需要解析的地址为%@",address);
CLGeocoder *geocoder=[[CLGeocoder alloc]init];
[geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if(error||placemarks.count==0){
NSLog(@"解析失败");
}else{
CLPlacemark *place=[placemarks lastObject];
MKPlacemark *mp=[[MKPlacemark alloc]initWithPlacemark:place];
MKMapItem *mapItem=[[MKMapItem alloc]initWithPlacemark:mp];
[self.mkItemArray addObject:mapItem];
NSLog(@"有%lu个Item被添加",(unsigned long)self.mkItemArray.count);
}
}];
m+=1;
}
NSLog(@"一共有%lu个Item",(unsigned long)self.mkItemArray.count);
假设地址数组中只有一个地址“上海”,我预想的输出顺序应该是:
1.“需要解析的地址为上海”
2.有1个Item被添加
3.一共有1个item
但实际是:
1.需要解析的地址为上海
2.一共有0个Item
3.有1个Item被添加
这是为什么?
/**
*/
public class DeleteEveryTwo {
public static void main(String[] args) {
int index = getLastDeletedIndex(8);
System.out.println("The last index deleted is " + index);
}
/**
@return 最后被删除的数的原始下标
*/
public static int getLastDeletedIndex(int len) {
if (len <= 0) { // 如果数组长度不满足要求则返回 -1
return -1;
}
int[] arr = new int[len];
for (int i = 0; i < len; i++) { // 初始化每个元素的值为当前下标
arr[i] = len;
}
final int DELFLAG = len + 1; // 删除标志位
int currentSize = len; // 记录数组当前有效长度(即未被置为删除标志的元素个数),最后变为 0
final int STEP = 2; // 步长
int count = 0; // 步长计数
int lastDelIndex = 0; // 记录最后被删除的元素的下标
int i = 0; // 循环下标
while (currentSize != 0) {
if (arr[i] != DELFLAG) { // 判读当前元素是否等于删除标志
if (count++ == STEP) { // 当步长计数满足步长则
arr[i] = DELFLAG; // 将元素置为删除标志位
lastDelIndex = i; // 记录该处下标
currentSize--; // 有效数组长度减 1
count = 0; // 步长计数归零
System.out.println("Deleted index is " + i % len);
}
}
i = (i + 1) % len; // 下标取余实现循环下标
}
return lastDelIndex;
}
}