2014-08-30 42 views
5

由於某些原因,PHAsset上的location屬性僅在Objective-c中暴露,而不在Swift中暴露。獲取Swift中PHAsset的位置

Documentation: PHAsset.location

要解決它,我想我可以創建一個Objective-C類,其唯一目的是提取位置,並將其導入斯威夫特。

LocationGetter.h

@interface LocationGetter : NSObject 
+ (CLLocation *)locationForAsset:(PHAsset *) asset; 
@end 

LocationGetter.m

@implementation LocationGetter 
+ (CLLocation *)locationForAsset:(PHAsset *) asset { 
    return [asset location]; 
} 
@end 

到目前爲止好,但是當我嘗試使用它在斯威夫特:

LocationGetter.locationForAsset(ass) 

「LocationGetter .Type'沒有名爲'locationForAsset'的成員

獎金的問題:爲什麼地球上沒有蘋果暴露在迅速location

+0

你能分享更多的代碼嗎?出於某種原因,這爲我崩潰。並非我所有的資產都有一個位置,也許這​​就是原因,但我不知道如何在您提供的客觀c函數中處理這個問題,非常感謝您的幫助。 – alexsalo 2014-12-27 20:11:00

+0

@alexsalo看起來蘋果已經在Swift中修復了'location'訪問器。你應該可以做'ass.location'來獲取位置。 '屁股'是你的PHAsset。 [文檔:PHAsset.location](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html#//apple_ref/occ/instp/PHAsset/location) – 2014-12-27 20:33:41

+0

是,你說得很對,那麼我解決了一個問題。再次感謝! – alexsalo 2014-12-28 03:11:59

回答

4

事實證明,答案非常簡單。問題是Swift文件不知道什麼是CLLocation,因此拒絕導入該函數。導入CoreLocation解決了這個問題。

import CoreLocation 

LocationGetter.locationForAsset(ass) 

編輯:蘋果公司由於包含.location作爲對PHAsset一個getter。獲取位置現在像asset.location一樣簡單。

+0

不要忘了標記自己的答案,如果它真的解決了問題 – Antonio 2014-08-30 12:48:23

+1

絕對,但我需要等待兩天才能接受我自己的答案... – 2014-08-30 13:16:53

+1

真的嗎?我不知道...對不起 – Antonio 2014-08-30 13:18:06

0

對於那些誰希望打印的每張照片的位置,那就是:

var allAssets = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil) 
    allAssets.enumerateObjectsUsingBlock({asset, index, stop in 
     if let ass = asset as? PHAsset{ 
      println(ass.location) 
     } 
    }