2015-10-05 54 views
23

Sto utilizzando Google 'reverseGeocodeCoordinate' per ottenere l'indirizzo in base a latitudine e longitudine.
Sto ottenendo il seguente errore nella realizzazioneRiferimento ambiguo al membro 'joinWithSeparator' in swift

ambiguo riferimento al membro 'joinWithSeparator'

Qui di seguito è la mia realizzazione:

let aGMSGeocoder: GMSGeocoder = GMSGeocoder() 
aGMSGeocoder.reverseGeocodeCoordinate(CLLocationCoordinate2DMake(17.45134626, 78.39304448)) { 
    (let gmsReverseGeocodeResponse: GMSReverseGeocodeResponse!, let error: NSError!) -> Void in 

    let gmsAddress: GMSAddress = gmsReverseGeocodeResponse.firstResult() 
    print("lines=\(gmsAddress.lines)") 
    let addressString = gmsAddress.lines.joinWithSeparator("") 
    print("addressString=\(addressString)") 

} 

Sto cercando di creare un addressString con gli elementi dell'array 'gmsAddress.lines', ma si conclude con un messaggio di errore.

implementato alcune frammento di campione per verificare 'joinWithSeparator'

let sampleArray = ["1", "2", "3", "4", "5"] 
let joinedString = sampleArray.joinWithSeparator("") 
print("joinedString=\(joinedString)") 

E 'riuscito.
Quello che osservo è, 'sampleArray' è un array di elementi di tipo String, ma 'gmsAddress.lines' è un array di elementi di tipo 'AnyObject', che si trova in 'GMSAddress' biblioteca:

/** An array of NSString containing formatted lines of the address. May be nil. */ 
public var lines: [AnyObject]! { get } 

Quindi, quali sono i possibili modi per raggiungere la seguente riga senza loop dell'array:

let addressString = gmsAddress.lines.joinWithSeparator("") 

risposta

25

è ambiguo perché la matrice può contenere AnyObject significato ogni oggetto nell'array potrebbe essere di tipo diverso. Pertanto, il compilatore non può sapere in anticipo se è possibile unire due oggetti nell'array.

Il motivo per cui il tuo sampleArray funziona è che è stato implicitamente determinato come array di stringhe.

Se si sa per certo che ogni elemento della matrice lines è una stringa è possibile forzare abbattuta ad un array di stringhe:

let addressString = (gmsAddress.lines as! [String]).joinWithSeparator("") 

Anche se è probabilmente vale la pena di essere sicuri di questo e la verifica prima.

if let lines = gmsAddress.lines as? [String] { 
    let addressString = lines.joinWithSeparator(", ") 

    ... 
} 
Problemi correlati