在 swift 中对成员 'joinWithSeparator' 的引用不明确
Ambiguous reference to member 'joinWithSeparator' in swift
我正在使用 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(", ")
...
}
我正在使用 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(", ")
...
}