我想自动完成的地址为用户一样,谷歌API在此链接中提供:
https://developers.google.com/maps/documentation/javascript/places-autocomplete?hl=en
我如何使用苹果Map工具包实现相同的功能?
我试过使用地理编码器,我写了这个例子:
@IBAction func SubmitGeoCode(sender: AnyObject) {
let address = "1 Mart"
let coder = CLGeocoder()
coder.geocodeAddressString(address) { (placemarks, error) -> Void in
for placemark in placemarks! {
let lines = placemark.addressDictionary?["FormattedAddressLines"] as? [String]
for addressline in lines! {
print(addressline)
}
}
}
}
然而,结果令人非常失望。
有没有苹果API可以实现这样的功能,或者我应该去谷歌API?
谢谢
5条答案
按热度按时间kuarbcqp1#
更新-我使用Swift 3创建了一个简单的示例项目here,因为原始答案是用Swift 2编写的。
在iOS 9.3中引入了一个名为
MKLocalSearchCompleter
的新类,这允许创建一个自动完成解决方案,您只需按如下所示传入queryFragment:然后使用
MKLocalSearchCompleterDelegate
处理查询结果:并以适当的格式显示地址结果:
然后,您可以使用
MKLocalCompletion
对象示例化MKLocalSearch.Request
,从而获得对MKPlacemark
和所有其他有用数据的访问:vsmadaxz2#
Swift 5 +合并+(可选)SwiftUI解决方案
似乎有很多关于其他解决方案的评论想要一个与更新版本的Swift兼容的版本。另外,看起来很可能(正如我所做的),人们也将需要SwiftUI解决方案。
这是基于以前的建议,但使用“合并”来监视输入、消除反跳,然后通过Publisher提供结果。
MapSearch
ObservableObject
可轻松用于SwiftUI(提供示例),但也可用于非SwiftUI情况。Map搜索可观察对象
SwiftUI界面,包括Map位置
2skhul333#
我的答案完全基于“乔治·麦克唐奈”。我希望这对那些在执行最后一个问题上遇到困难的人有所帮助。
字符串
wsxa1bj14#
此问题的示例项目可从HERE下载
在本示例项目中,此问题通过MKLocalSearchRequest和MapKit实现。
它显示自动完成的地方就像谷歌的地方API,可以把苹果的Map上的注解点(不是在谷歌Map上,我希望这是只有你正在寻找)。
然而,它并没有显示准确的结果,因为你可以从谷歌地点API。因为问题是,地理编码数据库显然不是完整的,苹果不是该领域的领导者-谷歌是。
附上示例应用程序的一些屏幕截图,以便您查看它是否对您的要求有用。
希望这是你要找的!
lndjwyie5#
简单的解决方案- SwiftUI
方式:searchText链接到Textfield,当Textfield更改时,将根据全球地址查询(比较)searchText。
查询的完成触发了completerDidUpdateResults,它使用这些结果(地址)更新SearchThis.swift列表。
搜索此.swift(SwiftUI)
搜索模型.swift(类)