如何访问与Uisearchbar一起使用的结构枚举值?

发布于 2025-02-13 23:19:31 字数 2452 浏览 0 评论 0原文

我正在努力学习创建和使用UITAITEVIEW和UISEARCHBAR的更复杂的结构。我有一个表,在2个部分中显示以下结构。

struct ReceiveInResponse: Codable {

    var result: [ReceiveIn]

}

struct ReceiveIn: Codable {

    var section: String
    var items: [ReceiveInComp]

    enum CodingKeys: String, CodingKey {
        case section = "Section"
        case items
    }

}

struct ReceiveInComp: Codable {

   let owner, barcode, quantity: String
   let resultDescription, status: String

   enum CodingKeys: String, CodingKey {
      case owner = "Owner"
      case barcode = "Barcode"
      case quantity = "Quantity"
      case resultDescription = "Description"
      case status = "Status"
   }

}

我已经多次实施了搜索栏。但是这一次,我在尝试搜索案例条形码的值时会遇到错误。这是错误。

Type '[ReceiveInComp]' has no member 'barcode'

这是我的代码

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
    self.filteredList = []

    if (searchText == "") {
        self.filteredList = self.ReviewList
    } else {
        for comp in self.ReviewList {
            
            let myitems = comp.items

尝试1

            switch myitems {

                case .barcode(let barcode): do { // error thrown here
                    if (barcode.lowercased().contains(searchText.lowercased())) {
                        self.filteredList.append(comp)
                    }
                }
            }

尝试2
var barcode = myitems.barcode //在此处丢弃的错误,

            if (barcode.lowercased().contains(searchText.lowercased())) {
                self.filteredList.append(comp)
            }
        }
    }
    self.tableView.reloadData()
}

我可以打印Myitems以控制并查看其包含的值。如何访问条形码的值以与搜索文本进行比较?

中打印(myitems)时看到的样本,

App.ReceiveInComp(owner: "E3D Rental", barcode: "10021640", quantity: "1", resultDescription: "2X2. X42 BLK CABINET ", status: "missing"),

这是我在控制台解决方案

        for comp in self.ReviewList {
            
            let myitems = comp.items
            
            for item in myitems{
                
                let barcode = item.barcode
                if (barcode.lowercased().contains(searchText.lowercased())) {
                    self.filteredList.append(comp)
                }
                
                
            }
}

这似乎有效,出于某种原因而在搜索结果中获得重复,但先前的错误已经消失。谢谢@shadowrun

I am struggling to learn about creating and using more complex structs with UITableView and UIsearchbar. I have a table that displays the following structs in 2 sections.

struct ReceiveInResponse: Codable {

    var result: [ReceiveIn]

}

struct ReceiveIn: Codable {

    var section: String
    var items: [ReceiveInComp]

    enum CodingKeys: String, CodingKey {
        case section = "Section"
        case items
    }

}

struct ReceiveInComp: Codable {

   let owner, barcode, quantity: String
   let resultDescription, status: String

   enum CodingKeys: String, CodingKey {
      case owner = "Owner"
      case barcode = "Barcode"
      case quantity = "Quantity"
      case resultDescription = "Description"
      case status = "Status"
   }

}

I have implemented the searchbar many times. But this time I am getting an error when trying to search the value of case barcode. This is the error.

Type '[ReceiveInComp]' has no member 'barcode'

Here is my code

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
    self.filteredList = []

    if (searchText == "") {
        self.filteredList = self.ReviewList
    } else {
        for comp in self.ReviewList {
            
            let myitems = comp.items

attempt 1

            switch myitems {

                case .barcode(let barcode): do { // error thrown here
                    if (barcode.lowercased().contains(searchText.lowercased())) {
                        self.filteredList.append(comp)
                    }
                }
            }

attempt 2
var barcode = myitems.barcode // error thrown here

            if (barcode.lowercased().contains(searchText.lowercased())) {
                self.filteredList.append(comp)
            }
        }
    }
    self.tableView.reloadData()
}

I can print myitems to console and see the values it contains. How do I access the value of barcode for comparison to searchtext?

Here is a sample of what I see when I do print(myitems) in console

App.ReceiveInComp(owner: "E3D Rental", barcode: "10021640", quantity: "1", resultDescription: "2X2. X42 BLK CABINET ", status: "missing"),

SOLUTION

        for comp in self.ReviewList {
            
            let myitems = comp.items
            
            for item in myitems{
                
                let barcode = item.barcode
                if (barcode.lowercased().contains(searchText.lowercased())) {
                    self.filteredList.append(comp)
                }
                
                
            }
}

this seems to work, getting duplicates in the search results for some reason but prior error is gone. thanks @shadowrun

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文