2015-10-05 7 views
23

私は緯度と経度に基づいてアドレスを取得するためにGoogleの 'reverseGeocodeCoordinate'を使用しています。
私はメンバーにメンバー 'joinWithSeparator'への曖昧な参照

あいまいな参照を実装して以下「joinWithSeparator」

を次のエラーを取得していますが、私の実装です:

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

} 

私が作成しようとしていますaddressStringの要素は配列 'gmsAddress.lines'になりますが、エラーメッセージが表示されます。

は、それが成功した

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

'をjoinWithSeparator' をテストするためのいくつかのサンプルスニペットを実装します。
私がされて観察する何、「sampleArrayは」タイプStringの要素の配列ですが、「gmsAddress.linesは」「GMSAddress」図書館で発見された型「AnyObject」の要素の配列、次のとおりです。

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

ので、配列をループさせずに次の行を達成することが可能な方法は何ですか:

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

答えて

25

アレイは、アレイ内のすべてのオブジェクトは、異なるタイプのものであってもよいAnyObject意味を含めることができるので、それがあいまいです。したがって、コンパイラは、配列内の2つのオブジェクトを結合できるかどうかを事前に知ることはできません。

sampleArrayの理由は暗黙のうちに文字列の配列であると判断されたためです。

あなたはlines、配列内のすべての要素を使用して、文字列の配列にダウンキャスト、それを強制することができ、文字列であるという事実を知っている場合:

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

それはこのことについて、安全であることと、最初のチェック、おそらく価値があるけれどもが。

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

    ... 
} 
関連する問題