无法转换类型的值 - Swift

时间:2015-12-01 19:09:46

标签: ios objective-c swift

我试图通过迁移现有的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
    }];

1 个答案:

答案 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隐含于闭包,因此此处并未明确要求。