6

何らかの理由locationで、 a のプロパティPHAssetは Objective-c でのみ公開され、Swift では公開されません。

ドキュメント: PHAsset.location

これを回避するために、場所を抽出して Swift にインポートすることのみを目的とする Objective-C クラスを作成できると考えました。

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)

「LocationGetter.Type」には「locationForAsset」という名前のメンバーがありません

locationおまけの質問: 一体なぜ、Appleは迅速に公開しなかったのですか?

4

4 に答える 4

4

答えは実にシンプルです。問題は、Swift ファイルが a が何であるかを認識していないためCLLocation、その関数のインポートを拒否することです。インポートCoreLocationすると問題が解決します。

import CoreLocation

LocationGetter.locationForAsset(ass)

編集: Apple はそれ以来.location、にゲッターとして含まれていPHAssetます。場所を簡単に取得できるようになりましasset.locationた。

于 2014-08-30T11:59:12.683 に答える
0

PHAsset次のコード行と同じくらい簡単に、すべての場所を取得できます。

let phFetchRes = PHAsset.fetchAssets(with: PHAssetMediaType.image , options: nil) // Fetch all PHAssets of images from Camera roll
let asset = phFetchRes.object(at: 0) // retrieve cell 0 as a asset 
let location = asset.location // retrieve the location
print(location) // Print result

または、PHAsset からすべての場所を取得する場合は、上記のコードを次のように使用できます。

let phFetchRes = PHAsset.fetchAssets(with: PHAssetMediaType.image , options: nil) // Fetch all PHAssets of images from Camera roll


phFetchRes.enumerateObjectsUsingBlock({asset, index, stop in
    if let ass = asset as? PHAsset{
        println(ass.location)
    }
}
于 2019-02-01T07:11:07.393 に答える