2015-12-01 65 views
1

我试图通过迁移现有的Objective-C项目,以学习斯威夫特,但有一些问题的方法之一。无法将类型的价值 - 斯威夫特

我得到以下错误: “无法将类型的价值 '(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) 
     }) 

工作Objective-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

看起来你正在使用的类型不正确标注在完成关闭。这应该这样做:

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隐含的封锁,除非另有规定,所以它这里没有明确需要。

+0

完美,陆克文!这解决了我的问题!感谢您的解释,我非常感谢! – infero