在swift中对成员’joinWithSeparator’的模糊引用

我正在使用Google的’reverseGeocodeCoordinate’来获取基于纬度和经度的地址。
我在实现中遇到以下错误

Ambiguous reference to member ‘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)")

}

我正在尝试使用数组’gmsAddress.lines’中的元素创建一个addressstring,但最终会出现错误消息。

实现了一些示例代码片段来测试’joinWithSeparator’

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

它成功了。
我观察到的是,’sampleArray’是String类型的元素数组,但’gmsAddress.lines’是’AnyObject’类型的元素数组,在’GMSAddress’库中找到:

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

那么,在没有循环数组的情况下,实现以下行的可能方法有哪些:

let addressstring = gmsAddress.lines.joinWithSeparator("")
它是不明确的,因为数组可以包含AnyObject,这意味着数组中的每个对象都可以是不同的类型。因此,编译器无法预先知道是否可以连接数组中的任何两个对象。

sampleArray工作的原因是它已被隐式确定为字符串数组。

如果您知道lines数组中的每个元素都是一个字符串,您可以强制将它向下转换为字符串数组:

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

虽然这可能是值得安全的,并先检查。

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

    ...
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...