我在以下代码中使用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]'
最终,我会将数据填充到表格中。
你有一些问题。似乎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 }