2014-08-30 3 views
5

По какой-то причине свойство location на PHAsset отображается только в Objective-c, а не в Swift.Получение местоположения PHAsset в 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) 

«LocationGetter .Type 'не имеет члена с именем' locationForAsset '

Бонусный вопрос: Почему на самом деле Apple не выставила location в swift?

+0

Вы можете разделить больше кода, пожалуйста? По какой-то причине это падает для меня. Не все из моих активов имеют место, может быть, это и есть причина, но я не знаю, как справиться с этим в объективной функции c, которую вы предоставили, помощь будет высоко оценена. – alexsalo

+0

@alexsalo Кажется, что Apple установила «местоположение» в Swift. Вы должны иметь возможность просто «ass.location», чтобы получить местоположение. 'ass' - ваш PHAsset. [Документация: PHAsset.location] (https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html#//apple_ref/occ/instp/PHAsset/location) –

+0

Да , вы совершенно правы, тогда у меня была проблема с разворачиванием. Еще раз спасибо! – alexsalo

ответ

4

Получается, что ответ действительно прост. Проблема в том, что файл Swift не знает, что такое CLLocation, и, таким образом, отказывается импортировать эту функцию. Импорт CoreLocation решает проблему.

import CoreLocation 

LocationGetter.locationForAsset(ass) 

EDIT: Apple, с тех пор включен .location как добытчика на PHAsset. Получение местоположения теперь так же просто, как asset.location.

+0

Не забудьте отметить свой собственный ответ в качестве решения, если он действительно решил проблему – Antonio

+1

Абсолютно, но мне нужно подождать два дня, чтобы принять мой собственный ответ ... –

+1

Действительно? Я не знал, что ... извините – Antonio

0

Для тех, кто хочет напечатать каждое местоположение фотографий, здесь:

var allAssets = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil) 
    allAssets.enumerateObjectsUsingBlock({asset, index, stop in 
     if let ass = asset as? PHAsset{ 
      println(ass.location) 
     } 
    } 
Смежные вопросы