我试图通过迁移现有的Objective-C项目来学习Swift,但是其中一个方法存在一些问题。
我收到以下错误:"无法转换类型'(SBStop,UInt,_)的值 - >虚空'到期望的参数类型'(AnyObject,Int,UnsafeMutablePointer) - >空隙'"
有关如何使其正常工作的任何建议吗?
夫特:
stops.enumerateObjectsUsingBlock({(stopItem: SBStop, idx: UInt, stop) -> Void in
stopLocation = CLLocation(latitude: stopItem.latitude, longitude: stopItem.longitude)
stopItem.distance = stopLocation.distanceFromLocation(location)
})
工作目标-C代码:
[stops enumerateObjectsUsingBlock:^(SBStop *stopItem, NSUInteger idx, BOOL *stop) {
stopLocation = [[CLLocation alloc] initWithLatitude:stopItem.latitude longitude:stopItem.longitude];
stopItem.distance = [stopLocation distanceFromLocation:location]; // in meters
}];
答案 0 :(得分:0)
看起来你在完成闭包中使用了错误的类型注释。这应该做:
stops.enumerateObjectsUsingBlock({(stopItem, _ , _) in
guard let stopItem = stopItem as? SBStop else { return }
stopLocation = CLLocation(latitude: stopItem.latitude, longitude: stopItem.longitude)
stopItem.distance = stopLocation.distanceFromLocation(location)
})
说明:
您正在使用的库将完成块的参数定义为(AnyObject, Int, UnsafeMutablePointer)
。如果您希望AnyObject属于特定类型,则需要适当地强制转换它(在这种情况下使用guard let
)
_
是一个Swift-ism,表示未使用的参数。
除非另有说明,否则-> Void
隐含于闭包,因此此处并未明确要求。