Swiftui 快捷键-搜索栏

Swiftui 快捷键-搜索栏,swiftui,Swiftui,我有以下名为SearchBar.swift的文件: import SwiftUI struct SearchBar: UIViewRepresentable { @Binding var text: String class Coordinator: NSObject, UISearchBarDelegate { @Binding var text: String init(text: Binding<String>) {

我有以下名为SearchBar.swift的文件:

import SwiftUI

struct SearchBar: UIViewRepresentable {

    @Binding var text: String

    class Coordinator: NSObject, UISearchBarDelegate {

        @Binding var text: String

        init(text: Binding<String>) {
            _text = text
        }

        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            text = searchText
        }
    }

    func makeCoordinator() -> Coordinator {
        return Coordinator(text: $text)
    }

    func makeUIView(context: UIViewRepresentableContext<SearchBar>) -> UISearchBar {
        let searchBar = UISearchBar(frame: .zero)
        searchBar.delegate = context.coordinator
        return searchBar
    }

    func updateUIView(_ uiView: UISearchBar,
                      context: UIViewRepresentableContext<SearchBar>) {
        uiView.text = text
    }
}
但是我还没有找到在列表中实现搜索的方法

我计划做一些类似的事情:

ForEach(self.lokaData.filter {
    self.searchText.isEmpty ? true : $0.contains(self.searchText)
}, id: \.self) 
但它不起作用。我遗漏了一些我不理解的概念。有什么想法吗

谢谢大家!

您正在应用于一个结构,这就是为什么会出现该错误,您应该将其应用于
Geolokation
的一个属性,下面是一个在latitud上查找匹配项的示例:

struct MyView: View {

    @State private var lokaData = [Geolokation.init(date: "date 1", id: "0", latitude: "1010", longitude: "2020", seq_number: "1234", accuracy: ""),
                                   Geolokation.init(date: "date 2", id: "1", latitude: "1020", longitude: "2030", seq_number: "5678", accuracy: ""),
                                   Geolokation.init(date: "date 3", id: "2", latitude: "1030", longitude: "2040", seq_number: "9101", accuracy: "")]
    var body: some View {
        VStack {
            //SearchBar
            ForEach(self.lokaData.filter {
                $0.latitude.contains(self.searchText)
            }, id: \.self) { item in
                Text(item.latitude)
            }
        }
    }
}
您正在应用于一个结构,这就是为什么会出现该错误,您应该将其应用于
Geolokation
的一个属性,下面是一个在latitud上查找匹配项的示例:

struct MyView: View {

    @State private var lokaData = [Geolokation.init(date: "date 1", id: "0", latitude: "1010", longitude: "2020", seq_number: "1234", accuracy: ""),
                                   Geolokation.init(date: "date 2", id: "1", latitude: "1020", longitude: "2030", seq_number: "5678", accuracy: ""),
                                   Geolokation.init(date: "date 3", id: "2", latitude: "1030", longitude: "2040", seq_number: "9101", accuracy: "")]
    var body: some View {
        VStack {
            //SearchBar
            ForEach(self.lokaData.filter {
                $0.latitude.contains(self.searchText)
            }, id: \.self) { item in
                Text(item.latitude)
            }
        }
    }
}

什么不起作用?告诉我们错误。并从ForEach中删除id参数。Geolokation已经符合Identified,因此您不需要手动指定其id。-错误:“类型为'Geolokation'的值没有成员'contains'”“什么不起作用?”?告诉我们错误。并从ForEach中删除id参数。Geolokation已经符合Identified,因此您无需手动指定其id。-错误为:“类型为'Geolokation'的值没有成员'contains'”