如何仅在搜索栏文本不为空时才运行过滤功能?



我在SwiftUi View中有一个搜索按钮和一个搜索栏。 当用户在搜索栏中键入时,我尝试运行函数 filter((。

如果我使用该按钮来触发操作,它可以工作,但我想在用户在栏中键入时触发操作。

我已经尝试过,但给我一个警告。

无法推断通用参数"虚假内容" 1. 调用函数 'buildBoth(first:(' (SwiftUI.ViewBuilder(

这是我的代码

struct ContentView: View {
@ObservedObject var dm: DataManager
@State private var searchTerm : String = ""
@State var filteredAirports: [AirportModel] = []
var body: some View {
VStack {
SearchBar(text: $searchTerm)
if searchTerm == "" {
/// don't do anything 
} else {
self.dm.filter2(valoreSearhed: self.searchTerm, arrayTosearh: self.dm.airportVector)
}
List {
ForEach(dm.appoggio) { valore in
Text(valore.aptICAO)
}
}
}
}
}
``

你的问题不是你的if/else,因为这有效:

如您所见,if/else 在那里,没有编译器警告...... Tipp:尝试注释掉所有语句,然后通过取消注释进行迭代,并检查编译器何时警告您 ->然后您有错误

struct ContentView: View {
var list = ["1","2","3"]
@State private var searchTerm : String = ""
var body: some View {
VStack {
//     SearchBar(text: $searchTerm)
if searchTerm == "" {
/// don't do anything
} else {
//                self.dm.filter2(valoreSearhed: self.searchTerm, arrayTosearh: self.dm.airportVector)
}
List(list, id: .self) { item in
Text(item)
//                ForEach(dm.appoggio) { valore in
//                    Text(valore.aptICAO)
//                }
}
}
}
}

可以使用自定义Binding执行此操作,该在searchTerm更改时执行筛选:

SearchBar(text: $searchTerm.didSet(execute: { _ in self.updateSearchResults() }))
...
extension Binding {
/// Execute block when value is changed.
///
/// Example:
///
///     Slider(value: $amount.didSet { print($0) }, in: 0...10)
func didSet(execute: @escaping (Value) ->Void) -> Binding {
return Binding(
get: {
return self.wrappedValue
},
set: {
self.wrappedValue = $0
execute($0)
}
)
}
}

相关内容

  • 没有找到相关文章

最新更新