swift - 使用带有 JSON 的 UISearchbar 来过滤结果

标签 swift uisearchbar

我在以下代码中使用 http 从 JSON 中获取数据:

我有一个 ObjectModel、DownloadModelProtocol 和 TableViewController

(模态.swift)

class OrderItemModal: NSObject {
    var deptname: String!
    var staffname: String!
    var status: String!
    var userid: String!
}

(下载订单模式.swift):

protocol OrderDownloadProtocol: class {
    func itemsDownload(items: Array<Any>)
}    
...
let bmsOrders = NSMutableArray()
...

weak var delegate: OrderDownloadProtocol!
let urlPath = "http://localhost/production/api/db_orders.php"

func downloadItems() {
    let url = URL(string: urlPath)!
    let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
...

    for i in 0..<jsonResult.count
    {
        jsonElement = jsonResult[i] as! NSDictionary
        let bmsOrder = OrderItemModal()
....
bmsOrders.add(bmsOrder)
....

声明:

var orderItems =  [OrderItemModal]()
var filterArray= [OrderItemModal]()

func itemsDownload(items: Array<Any>) {
    orderItems = items as! [OrderItemModal]
}

和 viewDidLoad:

let bmsOrder = DownloadOrderModal()
bmsOrder.delegate = self
bmsOrder.downloadItems()

这是 JSON 结果:

(
    {
    "deptname" = "Production";
    "staffname" = Warehouse;
    "status" = 1;
    "userid" = ware;
})

这是搜索条码

    filterArray = orderItems.filter( { ($0. staffname) (of: searchText, options: .caseInsensitive) })

最后,这是错误:

无法将类型“[OrderItemModal]”的值分配给类型“[String]”

最终,我会将数据填充到表中。

最佳答案

你有几个问题。似乎 orderItems 是一个 NSArray 数组,包含 OrderItemModal 值。您需要做的第一件事是停止使用 NSArray 并使用正确类型的 Swift 数组。在这种情况下,它应该是 [OrderItemModal]。您需要确保 filterArray 也声明为 [OrderItemModal]

过滤器对此类数组的结果将是一个 OrderItemModal 数组,但您试图将结果强制转换为一个 String 数组。

您还强制将闭包转换为 (Any) -> Bool。没有必要。

最后,您不必要地使用了 NSString。坚持使用 String

您只需要:

filterArray = orderItems.filter { (item) -> Bool in
    return item.staffname.range(of: searchText, options: .caseInsensitive) != nil
}

更简单:

filterArray = orderItems.filter { $0.staffname.range(of: searchText, options: .caseInsensitive) != nil }

关于swift - 使用带有 JSON 的 UISearchbar 来过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52142690/

相关文章:

uitableview - 我无法让我的 UITableView 快速重新加载数据

ios - 如何在我的 iOS 应用程序中调用 Cloud Code Function(Parse)?

Swift 结构类型递归

swift - 调用 tableView.reloadData 时不调用 cellForRowAtIndexPath

ios - 搜索栏和搜索栏 Controller 只需点击它就会崩溃

ios - 使用 UIIMagepickerController 打开相机不会在 iPod Touch 上快速显示渲染 View

ios - UIPopoverPresentationController 显示为全窗口弹出

ios - 如何为 UISearchBar IOS 添加 accessibilitylabel

uitableview - swift iOS 中的 TableView 问题

ios - 添加标签栏后搜索栏放在导航下方