2014-08-30 90 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) 
     } 
    }