我在以下代码中使用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]]
最终,我将数据填充到表中。
答案 0 :(得分:1)
您遇到了一些问题。看来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 }