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

问题描述 投票:1回答:1

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

我有一个ObjectModel,DownloadModelProtocol和TableViewController

(Modal.swift)

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

(DownloadOrderModal.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]'

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

swift uisearchbar
1个回答
1
投票

你有一些问题。似乎orderItemsNSArray数组的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 }
© www.soinside.com 2019 - 2024. All rights reserved.