2015-12-01 106 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