通用可搜索 SwiftUI 视图

SearchView

这个概念验证演示了如何使用 Swift 和 SwiftUI API 原生实现一个通用的 SearchView。该项目最初是为了响应 Swift() Telegram 群组 的请求而发起的。

示例项目

在此处探索详细示例,了解如何在这些示例应用程序中使用 SearchView

示例国家/地区搜索应用程序 示例水果搜索应用程序

理解 SearchView:深入指南

Swift 中的 SearchView 结构体为 SwiftUI 应用程序提供了一个通用且可自定义的搜索界面。本指南将探讨其组件、功能以及如何有效地将其集成到您的项目中。

核心概念

通用结构

SearchView 采用通用结构设计,以提供灵活性,定义如下:

主要特性

未来展望

我可能会以 KeyPath 的方式通用地支持搜索令牌

工作原理

初始化

要初始化 SearchView,您需要:

搜索功能

最近搜索

自定义

使用示例

定义您的数据模型并符合 Searchable 协议。

struct Fruit: Searchable {
    var id: UUID = UUID()
    var name: String
    var description: String

    var idStringValue: String {
        id.uuidString
    }
}

extension Fruit {
    // Sample data
    static var example: [Fruit] {
        [
            Fruit(name: "Apple", description: "Green and red."),
            Fruit(name: "Banana", description: "Long and yellow."),
            // Add more fruits...
        ]
    }
}

创建示例数组以在演示中使用

let dataList: [Fruit] = Fruit.example

在您的 SwiftUI 视图中实现 SearchView

@State private var searchQuery: String = ""

var body: some View {
    NavigationStack {
        SearchView(
            items: dataList,
            searchableProperties: [\.name, \.description],
            searchQuery: $searchQuery
        ) { fruit, searchTerm in
            VStack(alignment: .leading) {
                Text(fruit.name).bold().foregroundColor(.blue)
                Text(fruit.description).font(.subheadline)
            }
            .padding(.vertical, 4)
        }
        .navigationTitle("Searchable Items")
    }
}

安装

需要 iOS 17 和 Xcode 15 或更高版本。

  1. 在 Xcode 中,导航到 File -> Swift Packages -> Add Package Dependency
  2. 粘贴存储库 URL:https://github.com/cs4alhaider/SearchView
  3. 选择 master 分支或特定版本。

作者

Abdullah Alhaidercs.alhaider@gmail.com

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。