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

Documentation: PHAsset.location

要解决此问题,我认为可以创建一个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

到目前为止,一切都很好,但是当我尝试在Swift中使用它时:
LocationGetter.locationForAsset(ass)



额外的问题:苹果到底为什么不 swift 公开location

最佳答案

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

import CoreLocation

LocationGetter.locationForAsset(ass)

编辑:苹果从那以后就将.location包含在PHAsset中作为 setter/getter 。现在,获取位置就像asset.location一样容易。

09-28 07:08