我在以下代码中使用 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/