2014-08-30 8 views
5

Per qualche motivo la proprietà location su un PHAsset è esposta solo in Objective-c e non in Swift.Ottenere la posizione di un set PHA in Swift

Documentation: PHAsset.location

Per aggirare, ho pensato che avrei potuto creare una classe Objective-C il cui unico scopo è quello di estrarre la posizione e importarlo in Swift.

LocationGetter.h

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

LocationGetter.m

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

Fin qui tutto bene, ma quando provo ad usarlo a Swift:

LocationGetter.locationForAsset(ass) 

'LocationGetter .Type 'non ha un membro chiamato' locationForAsset '

Domanda bonus: Perché mai Apple ha smascherato location in rapido?

+0

Puoi condividere più di codice per favore? Per qualche ragione questo si blocca per me. Non tutte le mie risorse hanno una posizione, forse questa è la ragione, ma non so come gestirle in funzione dell'obiettivo c che hai fornito, l'aiuto sarebbe molto apprezzato. – alexsalo

+0

@alexsalo Sembra che Apple abbia corretto l'accessor "location" in Swift. Dovresti essere in grado di eseguire "ass.location" per ottenere la posizione. 'ass' è il tuo PHAsset. [Documentazione: PHAsset.location] (https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html#//apple_ref/occ/instp/PHAsset/location) –

+0

Sì , hai perfettamente ragione, ho avuto un problema con scartare quindi. Grazie ancora! – alexsalo

risposta

4

Si scopre che la risposta è davvero semplice. Il problema è che il file Swift non sa cosa sia un CLLocation e quindi si rifiuta di importare quella funzione. L'importazione di CoreLocation risolve il problema.

import CoreLocation 

LocationGetter.locationForAsset(ass) 

EDIT: Apple ha dato inserito .location come un getter sul PHAsset. Ottenere la posizione è ora semplice come asset.location.

+0

Non dimenticare di contrassegnare la tua risposta come la soluzione se ha davvero risolto il problema – Antonio

+1

Assolutamente, ma ho bisogno di aspettare due giorni per accettare la mia risposta ... –

+1

Davvero? Non lo sapevo ... mi dispiace – Antonio

0

Per coloro che cercano di stampare ogni luogo foto, eccolo:

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