SwiftUI+Combine实现简单搜索功能

本文介绍了如何在XCode 12.5.1和SwiftUI 2.0环境下,利用Combine框架实现一个简单的搜索功能。在ViewModel中,通过订阅`searchText`的发布者,并使用`debounce`修饰符延迟0.5秒后,根据输入内容过滤列表数据。当输入为空时显示原始列表,否则显示包含输入内容的小写形式的列表项。同时,ViewModel提供了一个`Stop`功能,用于取消订阅,控制搜索过程的终止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XCode 12.5.1 SwiftUI 2.0

首先创建一个简单的View和ViewModel

// MARK:- View
struct ContentView: View {
    
    @StateObject var vm = ViewModel()
    
    var body: some View {
        NavigationView {
            VStack {
                TextField("Search...",text: $vm.searchText)
                    .padding()
                    .background(Color.gray)
                    .padding()
                    .autocapitalization(/*@START_MENU_TOKEN@*/.none/*@END_MENU_TOKEN@*/)
                
                List(vm.listText, id: \.self) { t in
                    Text(t)
                }
            }
            .navigationBarItems(trailing: Button(action: {
                vm.stop()
            }, label: {
                Text("Stop")
            }))
        }
    }
}
// MARK: - ViewModel
class ViewModel: ObservableObject {
    @Published var searchT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值