2014-08-30 17 views
5

Vì một lý do nào đó, thuộc tính location trên PHAsset chỉ được hiển thị trong Mục tiêu-c chứ không phải trong Swift.Nhận vị trí của một PHAsset trong Swift

Documentation: PHAsset.location

Để làm việc xung quanh nó, tôi figured tôi có thể tạo ra một lớp Objective-C với mục đích duy nhất là để trích xuất các địa điểm và nhập nó vào Swift.

LocationGetter.h

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

LocationGetter.m

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

Cho đến nay rất tốt, nhưng khi tôi cố gắng sử dụng nó trong Swift:

LocationGetter.locationForAsset(ass) 

'LocationGetter .Type 'không có thành viên có tên' locationForAsset '

Câu hỏi bổ sung: Tại sao trái đất không Apple phơi bày location nhanh chóng?

+0

Bạn có thể chia sẻ mã hơn xin vui lòng? Vì lý do nào đó, sự cố này đã gây ra cho tôi. Không phải tất cả tài sản của tôi đều có một vị trí, có lẽ đó là lý do, nhưng tôi không biết cách xử lý điều này trong hàm c mục tiêu mà bạn cung cấp, trợ giúp sẽ được đánh giá cao. – alexsalo

+0

@alexsalo Dường như Apple đã sửa bộ truy cập 'location' trong Swift. Bạn sẽ có thể chỉ cần 'ass.location' để có được vị trí. 'ass' là PHAset của bạn. [Tài liệu: PHAsset.location] (https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html#//apple_ref/occ/instp/PHAsset/location) –

+0

Có , bạn hoàn toàn đúng, tôi đã có một vấn đề với unwrapping sau đó. Cảm ơn một lần nữa! – alexsalo

Trả lời

4

Hóa ra câu trả lời rất đơn giản. Vấn đề là tập tin Swift không biết CLLocation là gì, và do đó từ chối nhập chức năng đó. Nhập CoreLocation giải quyết vấn đề.

import CoreLocation 

LocationGetter.locationForAsset(ass) 

EDIT: kể từ Apple đã bao gồm .location như một getter trên PHAsset. Nhận vị trí hiện dễ dàng như asset.location.

+0

Đừng quên đánh dấu câu trả lời của riêng bạn là giải pháp nếu nó thực sự giải quyết được vấn đề – Antonio

+1

Tuyệt đối, nhưng tôi cần chờ hai ngày để chấp nhận câu trả lời của riêng tôi ... –

+1

Thật sao? Tôi không biết rằng ... xin lỗi – Antonio

0

Đối với những người tìm kiếm để in mỗi địa điểm ảnh, ở đây là:

var allAssets = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil) 
    allAssets.enumerateObjectsUsingBlock({asset, index, stop in 
     if let ass = asset as? PHAsset{ 
      println(ass.location) 
     } 
    } 
Các vấn đề liên quan