2015-10-05 10 views
23

używam Google „reverseGeocodeCoordinate”, aby uzyskać adres na podstawie długości i szerokości geograficznej.
Dostaję następujący błąd w realizacjiNiejednoznaczne odniesienie do członka „joinWithSeparator” w szybkim

Niejednoznaczne odniesienie do członka „joinWithSeparator”

Poniżej jest moja realizacja:

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)") 

} 

Próbuję utworzyć addressString z elementów w tablicy „gmsAddress.lines”, ale kończy się z komunikatem o błędzie.

Zaimplementowane jakiś przykładowy fragment przetestowania 'joinWithSeparator'

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

to udało.
Co mogę obserwować to, „sampleArray” jest tablicą elementów typu String, ale „gmsAddress.lines” jest tablicą elementów typu „AnyObject”, znajdują się w „GMSAddress” biblioteki:

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

Więc, Jakie są możliwe sposoby, aby osiągnąć następujący wiersz bez zapętlenie tablicy:

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

Odpowiedz

25

to jest niejednoznaczna, ponieważ tablica może zawierać AnyObject sens każdy obiekt w tablicy mogłoby być innego typu. Dlatego kompilator nie może z góry wiedzieć, czy dwa dowolne obiekty w tablicy mogą być łączone.

Powodem swoje prace sampleArray jest to, że został w sposób dorozumiany określono na tablicę ciągów.

Jeśli wiesz o tym, że każdy element tablicy lines jest ciągiem można wymusić przygnębiony go do tablicy ciągów:

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

Choć to chyba warto być bezpieczny o tym i sprawdzenie w pierwszej kolejności.

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

    ... 
} 
Powiązane problemy