我正在try 创建可搜索变量,以便当我在搜索栏中输入&>和Amount时,我会得到等于或大于输入的Amount的所有交易的列表

当我在搜索栏中输入<和Amount时,我会得到一个等于或小于所输入金额的所有交易的列表.

例如,当我在搜索栏中输入>50时,我希望筛选等于或大于50的所有交易的列表

以下是该参考的代码示例:

struct Items: Identifiable {
    let id = UUID().uuidString
    let name: String
    let amount: Double
    static var samples: [Items] = [
        Items(name: "item 1", amount: 10.9),
        Items(name: "item 2", amount: 50.0),
        Items(name: "item 3", amount: 30.7),
        Items(name: "item 4", amount: -10.9),
        Items(name: "item 5", amount: 80.3),
        Items(name: "item 6", amount: 15.3),
        Items(name: "item 7", amount: 80.0),
    ]
}
import SwiftUI

struct ContentView: View {
    @State var queryList: [Items] = Items.samples
    @State var searchQuery = ""
    
    var searchResult: [Items] {
        guard !searchQuery.isEmpty else {return queryList}
        return
            queryList.filter({$0.amount >= (Double(searchQuery) ?? 0) || $0.amount <= Double(searchQuery) ?? 0})

    }
    
    var body: some View {
        NavigationStack {
            
            List {
                ForEach(searchResult) { list in
                    HStack {
                        Text(list.name)
                        Spacer()
                        Text("\(list.amount)")
                    }
                }
            }
            .listStyle(.plain)
            .searchable(text: $searchQuery)
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

推荐答案

您可以try 此方法,使用修改后的searchResult,例如:

struct Item: Identifiable {
    let id = UUID().uuidString
    let name: String
    let amount: Double
    
    static var samples: [Item] = [
        Item(name: "item 1", amount: 10.9),
        Item(name: "item 2", amount: 50.0),
        Item(name: "item 3", amount: 30.7),
        Item(name: "item 4", amount: -10.9),
        Item(name: "item 5", amount: 80.3),
        Item(name: "item 6", amount: 15.3),
        Item(name: "item 7", amount: 80.0)
    ]
}

struct ContentView: View {
    @State var queryList: [Item] = Item.samples
    @State var searchQuery = ""
    
   var searchResult: [Item] {
    // remove any blank spaces
    let search = searchQuery.trimmingCharacters(in: .whitespacesAndNewlines)
    guard !search.isEmpty else {return queryList}

    // extract the operator
    let op = String(search.prefix(1))
    // remove the operator, to get just the value part
    let value = String(search.dropFirst())
    let doubleVal = Double(value) ?? 0.0

    // operator conditions
    if op == ">" {
        return queryList.filter({$0.amount >= doubleVal})
    }
    if op == "<" {
        return queryList.filter({$0.amount <= doubleVal})
    }
    // up to you here
    return queryList.filter({$0.amount == Double(search) ?? 0.0})
}
    
    var body: some View {
        NavigationStack {
            List {
                ForEach(searchResult) { list in
                    HStack {
                        Text(list.name)
                        Spacer()
                        Text("\(list.amount)")
                    }
                }
            }
            .listStyle(.plain)
            .searchable(text: $searchQuery)
        }
        .padding()
    }
}

Swift相关问答推荐

如何在Swift 中创建移动的uil标签?

运行异步任务串行运行

通过SwiftUI中的列表 Select 从字典中检索值

SWIFT`String.Encoding`:`.unicode`vs`.utf16`

可以将属性名称传递给 Swift 中的函数吗?

计算 CoreData 中所有唯一对象的数量?

列表不显示信息

If 语句在 Swift 中有 2 个日期

PassthroughSubject 的 AsyncPublisher 值属性未生成所有值

如何在 swift 5.0 中获取当前行

如何制作进度加载动画?

我怎样才能缩短(提高效率)这段代码?

如何在填充上添加 if else 语句? SwiftUI

Swift Components.Url 返回错误的 URL

我如何从 UIAlertController 导航到新屏幕(swiftUI)

为什么 `map(foo)` 和 `map{ foo($0) }` 返回不同的结果?

MKAnnotation Swift

使用 DispatchTime.now() + float 延迟?

在 Swift 中子类化 NSObject - 初始化器的最佳实践

iPhone 纵向和 iPad 横向的通用应用程序