阿尔戈利亚.
InstantSearch 系列: InstantSearch iOS |即时搜索 Android |反应即时搜索 |即时搜索.js | Angular 即时搜索 | Vue 即时搜索。
InstantSearch iOS是一个提供组件和帮助程序的框架,可帮助您使用 Algolia 在 iOS 上构建最佳的即时搜索体验。它建立在 Algolia 的 Swift API 客户端库之上,为您提供快速构建各种搜索界面的高级解决方案。
InstantSearch iOS由三个产品组成
您可以在示例项目中看到 InstantSearch iOS 的实际应用。它包含使用 InstantSearch 构建并用 Swift 编写的搜索组件和体验。
Swift Package Manager 是一个用于管理 Swift 代码分发的工具。它与 Swift 构建系统集成,可自动执行下载、编译和链接依赖项的过程。自 Swift 5 和 Xcode 11 发布以来,SPM 与用于创建应用程序的 iOS、macOS 和 tvOS 构建系统兼容。
要使用 SwiftPM,您应该使用 Xcode 11 打开您的项目。单击File
-> Swift Packages
-> Add Package Dependency
,输入 InstantSearch 存储库的 URL。接下来,从提供的列表中选择您考虑在项目中使用的产品。
如果您是框架作者并使用 InstantSearch 作为依赖项,请更新您的Package.swift
文件:
let package = Package (
// 7.26.0 ..< 8.0.0
dependencies : [
. package ( url : " https://github.com/algolia/instantsearch-ios " , from : " 7.26.0 " )
] ,
// ...
)
CocoaPods 是 Cocoa 项目的依赖管理器。
要安装 InstantSearch,只需将以下行添加到您的 Podfile 中:
pod 'InstantSearch' , '~> 7.26'
# pod 'InstantSearch/Insights' for access to Insights library only
# pod 'InstantSearch/Core' for access business logic without UIKit components
# pod 'InstantSearch/SwiftUI' for access to SwiftUI components
然后,运行以下命令:
$ pod update
Carthage 是 Cocoa 的一个简单的、去中心化的依赖管理器。
github "algolia/instantsearch-ios" ~> 7.26
carthage update
./Carthage/Checkouts/instant-search-ios/carthage-prebuild
carthage build
注意:目前,Carthage 不提供仅构建特定存储库子组件(或 CocoaPods 子规范的等效项)的方法。所有组件及其依赖项都将使用上述命令构建。但是,您不需要将不使用的框架复制到项目中。例如,如果您不使用
InstantSearch
中的 UI 组件,请在carthage update
完成后从 Carthage Build 目录中删除该框架,仅保留InstantSearchCore
。如果您只需要事件跟踪功能,请删除除InstantSearchInsights
框架之外的所有框架。
如果这是您第一次在项目中使用 Carthage,您将需要执行一些额外的步骤,如 Carthage 中所述。
您可以从入门指南开始。
在专用文档网站中了解有关 instantSearch iOS 的更多信息。
在你的ViewController.swift
中:
import InstantSearch
struct Item : Codable {
let name : String
}
class SearchResultsViewController : UITableViewController , HitsController {
var hitsSource : HitsInteractor < Item > ?
override func viewDidLoad ( ) {
super . viewDidLoad ( )
tableView . register ( UITableViewCell . self , forCellReuseIdentifier : " cell " )
}
override func tableView ( _ tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
hitsSource ? . numberOfHits ( ) ?? 0
}
override func tableView ( _ tableView : UITableView , cellForRowAt indexPath : IndexPath ) -> UITableViewCell {
let cell = tableView . dequeueReusableCell ( withIdentifier : " cell " , for : indexPath )
cell . textLabel ? . text = hitsSource ? . hit ( atIndex : indexPath . row ) ? . name
return cell
}
override func tableView ( _ tableView : UITableView , didSelectRowAt indexPath : IndexPath ) {
if let _ = hitsSource ? . hit ( atIndex : indexPath . row ) {
// Handle hit selection
}
}
}
class ViewController : UIViewController {
lazy var searchController = UISearchController ( searchResultsController : hitsViewController )
let hitsViewController = SearchResultsViewController ( )
let searcher = HitsSearcher ( appID : " latency " ,
apiKey : " 1f6fd3a6fb973cb08419fe7d288fa4db " ,
indexName : " bestbuy " )
lazy var searchConnector = SearchConnector < Item > ( searcher : searcher ,
searchController : searchController ,
hitsInteractor : . init ( ) ,
hitsController : hitsViewController )
override func viewDidLoad ( ) {
super . viewDidLoad ( )
searchConnector . connect ( )
searcher . search ( )
setupUI ( )
}
override func viewDidAppear ( _ animated : Bool ) {
super . viewDidAppear ( animated )
searchController . isActive = true
}
func setupUI ( ) {
view . backgroundColor = . white
navigationItem . searchController = searchController
searchController . hidesNavigationBarDuringPresentation = false
searchController . showsSearchResultsController = true
searchController . automaticallyShowsCancelButton = false
}
}
您现在可以构建并运行应用程序来查看基本的搜索体验。您应该看到每次击键时结果都会发生变化。
为了获得更有意义的搜索体验,请遵循入门指南。如果您构建 SwiftUI 应用程序,请查看 SwiftUI 入门指南
如果您的项目中只需要业务逻辑模块并使用InstantSearchCore
框架,请将import InstantSearchCore
添加到源文件中。
库生成的日志严重性有 7 个级别。默认严重性级别为.info
。您可以按如下方式配置日志记录级别:
Logs.logSeverityLevel = .debug
InstantSearch iOS 在运行时收集数据点。这有助于 InstantSearch 团队改进并优先考虑未来的开发。
以下是所收集数据的详尽列表:
HitsSearcher
、 FilterState
FacetListInteractor
中的facets
值的默认值是一个空列表。如果您使用构面列表实例化它,则遥测会跟踪facets
参数收到的自定义值,而不是值本身。InstantSearch 不会收集任何敏感或个人数据。但是,您仍然可以使用以下代码选择退出遥测收集:
InstantSearchTelemetry . shared . isEnabled = false
InstantSearch iOS 已获得 Apache 2.0 许可。