Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – 将项添加到对象中大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我希望能够将个人位置附加到MKLOCATIOnSearchCompletion数组中,当用户搜索搜索栏时可以找到该数组.但是,我无法理解项目如何存储到对象中以及是否可以将地标对象(或位置信息)添加到MKLOCATIOnSearch对象中.我从文档中获得的是MKLocalSearchCompleter对象存储当用户在搜索栏中键入部分字符串时访问的字符串.但我不知道在哪里可以访问此阵列并添加新位置.
我希望能够将个人位置附加到MKLOCATIOnSearchCompletion数组中,当用户搜索搜索栏时可以找到该数组.但是,我无法理解项目如何存储到对象中以及是否可以将地标对象(或位置信息)添加到MKLOCATIOnSearch对象中.我从文档中获得的是MKLocalSearchCompleter对象存储当用户搜索栏中键入部分字符串时访问的字符串.但我不知道在哪里可以访问此阵列并添加新位置.

以下是代码的结构,以显示搜索完成结果:

var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()

@IBOutlet weak var searchBar: UISearchBar!

override func viewDidLoad() {
    searchCompleter.delegate = self
    searchBar.delegate = self
}

extension ViewController: MKLocalSearchCompleterDelegate {
    func completerDidupdateResults(_ completer: MKLocalSearchCompleter) {
        searchResults = completer.results
        searchResultsTableView.reloadData()
    }

    func completer(_ completer: MKLocalSearchCompleter,didFailWithError error: Error) {
        // handle error
    }
}

extension ViewController: UITableViewDatasource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView,numberOfRowsInSection section: int) -> Int {
        return searchResults.count
    }

    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let searchResult = searchResults[indexPath.row]
        let cell = UITableViewCell(style: .subtitle,reusEIDentifier: nil)

        cell.textLabel?.attributedText = highlightedText(searchResult.title,inRanges: searchResult.titleHighlightRanges,size: 17.0)
        cell.detailTextLabel?.attributedText = highlightedText(searchResult.subtitle,inRanges: searchResult.subtitleHighlightRanges,size: 12.0)

        return cell
    }
}

extension ViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
        searchCompleter.queryFragment = searchText
    }

    func searchBarShouldEndEdiTing(_ searchBar: UISearchBar) -> Bool {
        self.searchBar.endEdiTing(true)
        searchBar.resignFirstResponder()
        return true
    }
}
@H_696_20@
我不认为您可以将自己的位置和POI添加到MapKit,但是:

1)我建议你创建一个自己的枚举

class CustomSearchResult {
    let title: String
    ...
}

enum SearchResultType {
    case localSearchResult(result: MKLocalSearchCompletion)
    case customResult(result: CustomSearchResult)
}

2)你有你的结果数组:

var searchResults = [SearchResultType]()

3)在completerDidupdateResults中,您可以将个人结果和MapKit结果添加到searchResults数组中:

searchResults = completer.results.map { 
   SearchResultType.localSearchResult(result: $0) }

// Add here custom results
searchResults.append(SearchResultType.customResult(result: 
    CustomSearchResult(title: "test")))

4)..并且在cellForRowATindexPath中,您可以决定是否有自定义或MapKit结果:

let searchResult = searchResults[indexPath.row]
switch searchResult {
case .customResult(let result):
    cell.textLabel.text = result.title
case .localSearchResult(let result):
    cell.textLabel.text = result.title
}

大佬总结

以上是大佬教程为你收集整理的数组 – 将项添加到对象中全部内容,希望文章能够帮你解决数组 – 将项添加到对象中所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。