首页 > 解决方案 > 如何访问 Algolia 索引和搜索属性?

问题描述

我是一名使用 Swift 5 的 iOS Swift 开发人员,我刚刚将我的 Algolia podpod 'AlgoliaSearch-Client-Swift', '~> 5.0'pod 'InstantSearchClient', '~> 7.0'.

我将标题从更改import AlgoliaSearchimport InstantSearchClient

一旦我这样做了,我就无法再访问 Algolia 数据类型:

在此处输入图像描述

文档说:

let index = client.index(withName: "contacts")
index.search(Query(query: "s"), completionHandler: { (content, error) -> Void in
  if error == nil {
      print("Result: \(content!)")
  }
})

datatype该页面上的任何地方都没有说明of是什么,client所以我进行了疯狂的猜测并使用了:var index: Client!which 工作。我有点困惑为什么该页面没有说明任何关于Client成为数据类型的内容。

无论如何,现在我可以访问Client我不再可以访问indexorsearch属性:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

如何访问indexsearch属性?

这是代码:

// import AlgoliaSearch // this is from the old pod
import InstantSearchClient

var index: Client! // before changing the pod I used AlgoliaSearch.Index! which worked fine
let query = Query()
var searchId = 0
var loadedPage: UInt = 0
var nbPages: UInt = 0

override func viewDidLoad() {
    super.viewDidLoad()

    let apiClient = Client(appID: "12345", apiKey: "ABC...XYZ")

    // *** error ***
    index = apiClient.index(withName: "myIndex")

    query.hitsPerPage = 15
    query.attributesToRetrieve = ["flavor", "color"]
}

func updateSearchResults(for searchController: UISearchController) {

    query.query = searchController.searchBar.text
    let curSearchId = searchId

    // *** error ***
    index.search(query, completionHandler: { [weak self] (data, error) in
    })
}

func loadMore() {

    if loadedPage + 1 >= nbPages {
        return
    }
    let nextQuery = Query(copy: query)
    nextQuery.page = loadedPage + 1

    // *** error ***
    index.search(nextQuery, completionHandler: { [weak self] (data , error) in
    })
}

标签: iosswiftalgolia

解决方案


Client是错误的答案。

在旧的下import AlgoliaSearch我用过AlgoliaSearch.Index,但在新的下import InstantSearchClient我用过InstantSearchClient.Index

现在声明是:

var index: InstantSearchClient.Index!

完整的代码是:

import InstantSearchClient

var index: InstantSearchClient.Index! // this works :)

override func viewDidLoad() {
    super.viewDidLoad()

    // ...
}

推荐阅读