在Swift中获取PHAsset的位置

时间:2023-01-31 21:54:13

For some reason the location property on a PHAsset is only exposed in Objective-c and not in Swift.

由于某种原因,PHAsset上的location属性仅在Objective-c中公开,而不在Swift中公开。

Documentation: PHAsset.location

To work around it, I figured I could create a Objective-C class whose sole purpose is to extract the location and import it into Swift.

为了解决这个问题,我想我可以创建一个Objective-C类,其唯一目的是提取位置并将其导入Swift。

LocationGetter.h

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

LocationGetter.m

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

So far so good, but when I try to use it in Swift:

到目前为止一切都那么好,但是当我尝试在Swift中使用它时:

LocationGetter.locationForAsset(ass)

'LocationGetter.Type' does not have a member named 'locationForAsset'

'LocationGetter.Type'没有名为'locationForAsset'的成员

Bonus question: Why on earth didn't Apple expose location in swift?

奖金问题:为什么Apple没有公开位置?

2 个解决方案

#1


4  

It turns out that the answer is really simple. The problem is that the Swift file don't know what a CLLocation is, and thus refuses to import that function. Importing CoreLocation solves the issue.

事实证明,答案非常简单。问题是Swift文件不知道CLLocation是什么,因此拒绝导入该函数。导入CoreLocation可以解决问题。

import CoreLocation

LocationGetter.locationForAsset(ass)

EDIT: Apple has since included .location as a getter on the PHAsset. Getting the location is now as easy as asset.location.

编辑:Apple已将.location列为PHAsset的吸气剂。获取位置现在就像asset.location一样简单。

#2


0  

For those who looking to print each photo location, here it is:

对于那些希望打印每个照片位置的人来说,这里是:

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

#1


4  

It turns out that the answer is really simple. The problem is that the Swift file don't know what a CLLocation is, and thus refuses to import that function. Importing CoreLocation solves the issue.

事实证明,答案非常简单。问题是Swift文件不知道CLLocation是什么,因此拒绝导入该函数。导入CoreLocation可以解决问题。

import CoreLocation

LocationGetter.locationForAsset(ass)

EDIT: Apple has since included .location as a getter on the PHAsset. Getting the location is now as easy as asset.location.

编辑:Apple已将.location列为PHAsset的吸气剂。获取位置现在就像asset.location一样简单。

#2


0  

For those who looking to print each photo location, here it is:

对于那些希望打印每个照片位置的人来说,这里是:

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