访问 MKLocalSearch 响应项目 (swift)
Accessing MKLocalSearchResponse item (swift)
当我执行 println(localSearchResponse)
时,我得到一个 MapItem 对象,其中包含大量关于位置的详细信息。在这个例子中,它是 UCSD。这是我的日志中显示的输出。
<MKLocalSearchResponse: 0x1c53d640> {
boundingRegion = "<center:+32.87514836, -117.23958822 span:+0.00725621, +0.00825332>";
mapItems = (
"<MKMapItem: 0x1c538090> {\n isCurrentLocation = 0;\n name = \"University of California, San Diego\";\n phoneNumber = \"+18585342230\";\n placemark = \"University of California, San Diego, 9500 Gilman Dr, La Jolla, CA 92093-5004, United States @ <+32.87529400,-117.23961000> +/- 0.00m, region CLCircularRegion (identifier:'<+32.87514837,-117.23958825> radius 557.57', center:<+32.87514837,-117.23958825>, radius:557.57m)\";\n url = \"http://www.ucsd.edu\";\n}"
);
}
注意它是如何输出 placemark = University of California...
和地址的吗?如何获取此值并将其存储到变量中?这是我的代码:
localSearchRequest = MKLocalSearchRequest()
localSearchRequest.naturalLanguageQuery = addressTextField.text
localSearch = MKLocalSearch(request: localSearchRequest)
localSearch.startWithCompletionHandler { (localSearchResponse, error) -> Void in
if localSearchResponse == nil{
var alert = UIAlertView(title: nil, message: "Place not found", delegate: self, cancelButtonTitle: "Try again")
alert.show()
return
}
//prints the MKLocalSearchResponse with name, phoneNumber, placemark
println(localSearchResponse)
//Get latitude and longitude
var newRecordLat = localSearchResponse.boundingRegion.center.latitude
var newRecordLong = localSearchResponse.boundingRegion.center.longitude
//How do I get the address, which is "placemark" in the MKLocalSearchResponse?
var newRecordAddress = localSearchResponse.mapItems...???
//store values to Parse
self.latToParse = newRecordLat
self.longToParse = newRecordLong
}
的文档
这里是 MKMapItem
的文档
因为mapItems
是一个数组,你需要调用first
来访问那个数组的第一个元素。这将 return 一个 MKMapItem
,因此您可以使用此代码获取地标 属性:
localSearchResponse.mapItems.first.placemark
答案是:
var newRecordAddress = (localSearchResponse.mapItems[0] as! MKMapItem).placemark
此对象包含您需要的所有信息。在演示项目中检查过
仅地址:
var newRecordAddress = (localSearchResponse.mapItems[0] as! MKMapItem).placemark
let addressOnly = newRecordAddress.name + ", " + newRecordAddress.title
newRecordAddress.name
是地名
newRecordAddress.title
是您需要的地址
当我执行 println(localSearchResponse)
时,我得到一个 MapItem 对象,其中包含大量关于位置的详细信息。在这个例子中,它是 UCSD。这是我的日志中显示的输出。
<MKLocalSearchResponse: 0x1c53d640> {
boundingRegion = "<center:+32.87514836, -117.23958822 span:+0.00725621, +0.00825332>";
mapItems = (
"<MKMapItem: 0x1c538090> {\n isCurrentLocation = 0;\n name = \"University of California, San Diego\";\n phoneNumber = \"+18585342230\";\n placemark = \"University of California, San Diego, 9500 Gilman Dr, La Jolla, CA 92093-5004, United States @ <+32.87529400,-117.23961000> +/- 0.00m, region CLCircularRegion (identifier:'<+32.87514837,-117.23958825> radius 557.57', center:<+32.87514837,-117.23958825>, radius:557.57m)\";\n url = \"http://www.ucsd.edu\";\n}"
);
}
注意它是如何输出 placemark = University of California...
和地址的吗?如何获取此值并将其存储到变量中?这是我的代码:
localSearchRequest = MKLocalSearchRequest()
localSearchRequest.naturalLanguageQuery = addressTextField.text
localSearch = MKLocalSearch(request: localSearchRequest)
localSearch.startWithCompletionHandler { (localSearchResponse, error) -> Void in
if localSearchResponse == nil{
var alert = UIAlertView(title: nil, message: "Place not found", delegate: self, cancelButtonTitle: "Try again")
alert.show()
return
}
//prints the MKLocalSearchResponse with name, phoneNumber, placemark
println(localSearchResponse)
//Get latitude and longitude
var newRecordLat = localSearchResponse.boundingRegion.center.latitude
var newRecordLong = localSearchResponse.boundingRegion.center.longitude
//How do I get the address, which is "placemark" in the MKLocalSearchResponse?
var newRecordAddress = localSearchResponse.mapItems...???
//store values to Parse
self.latToParse = newRecordLat
self.longToParse = newRecordLong
}
的文档
这里是 MKMapItem
的文档因为mapItems
是一个数组,你需要调用first
来访问那个数组的第一个元素。这将 return 一个 MKMapItem
,因此您可以使用此代码获取地标 属性:
localSearchResponse.mapItems.first.placemark
答案是:
var newRecordAddress = (localSearchResponse.mapItems[0] as! MKMapItem).placemark
此对象包含您需要的所有信息。在演示项目中检查过
仅地址:
var newRecordAddress = (localSearchResponse.mapItems[0] as! MKMapItem).placemark
let addressOnly = newRecordAddress.name + ", " + newRecordAddress.title
newRecordAddress.name
是地名
newRecordAddress.title
是您需要的地址