J'utilise "reverseGeocodeCoordinate
" de Google pour obtenir une adresse basée sur la latitude et la longitude.
J'obtiens l'erreur suivante dans l'implémentation
Référence ambiguë au membre "joinWithSeparator"
Voici ma mise en œuvre:
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)")
}
J'essaie de créer un addressString
avec les éléments du tableau 'gmsAddress.lines
', mais se retrouve avec un message d'erreur.
Implémentation d'un exemple d'extrait pour tester 'joinWithSeparator
'
let sampleArray = ["1", "2", "3", "4", "5"]
let joinedString = sampleArray.joinWithSeparator("")
print("joinedString=\(joinedString)")
Cela a réussi.
Ce que j'observe, "sampleArray
" est un tableau d'éléments de type String
, mais "gmsAddress.lines
'est un tableau d'éléments de type' AnyObject
', trouvé dans la bibliothèque' GMSAddress
':
/** An array of NSString containing formatted lines of the address. May be nil. */
public var lines: [AnyObject]! { get }
Alors, quelles sont les façons possibles d'atteindre la ligne suivante sans boucler le tableau:
let addressString = gmsAddress.lines.joinWithSeparator("")
Il est ambigu car le tableau peut contenir AnyObject
ce qui signifie que chaque objet du tableau pourrait être d'un type différent. Par conséquent, le compilateur ne peut pas savoir à l'avance si deux objets du tableau peuvent être joints.
La raison pour laquelle votre sampleArray
fonctionne est qu'il a été implicitement déterminé comme étant un tableau de chaînes.
Si vous savez pertinemment que chaque élément du tableau lines
est une chaîne, vous pouvez le forcer à le convertir en un tableau de chaînes:
let addressString = (gmsAddress.lines as! [String]).joinWithSeparator("")
Bien que cela vaut probablement la peine d'être prudent à ce sujet et de vérifier d'abord.
if let lines = gmsAddress.lines as? [String] {
let addressString = lines.joinWithSeparator(", ")
...
}