swift - 在 swift 中对成员 'joinWithSeparator' 的引用不明确

标签 swift nsarray ios9 google-maps-sdk-ios

我正在使用 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(", ")

    ...
}

关于swift - 在 swift 中对成员 'joinWithSeparator' 的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946683/

相关文章:

arrays - 按顺序从 NSSet 创建数组

ios - 如何从用户类解析swift中提取文件

swift - 使用队列和信号量进行并发和属性包装?

ios - 如何在ios9中禁用旋转

ios - 还需要 SQLCipher 吗?

objective-c - Xcode 7 GM(iOS9) 不支持启动画面动画。应用程序因错误而崩溃

ios - ARKit 1.5 : Extract the recognized image

ios - 如何获取数组的内容以显示在 uitextfield 上

iphone - 如何向 IBOutletCollection 添加对象?

iphone - 我创建了一个简单的球类游戏。现在我尝试让球移动得更快......有人有想法吗?