ios – 客户端在搜索时如何与后端交换数据?

初学iOS,在做搜索功能的时候遇到了这个问题。
做的是一个商品类应用,在用户搜索商品时,目前打算把所有商品名一次性在初始化时获取,然后再搜索。但是如果商品数量很大,我觉得这样不现实。
请问一般搜索功能前后端数据是如何交互的呢?
有哪些思路?

两种实现方式,如果很条目很少且稳定,就按你这样的获取,减少流量,加快搜索速度。
通常是,传搜索内容到后端,后端返回搜索后的结果。

通常是用HTTPRequest(NSURL,NSURLConnection,NSURLSession等系统自带的方法,或者AFNetworking等第三方库)发送一个get或者post请求到服务器,里面包含了你想检索的信息,例如商品类型,颜色,价格等等,通常是以JSON形式。然后等待服务器返回搜索结果,一般也是以JSON的格式,然后从服务器得到的内容作为结果展示出来。

如果是一個枚舉類型的數據, 選項有限,當然就是都放在客戶端,然後來檢索。

如果像你說的,是商品,而且數量很大,那就只能放到服務器來做檢索了,用戶輸入完關鍵詞,點搜索,則把關鍵詞發送到服務器,服務器返回檢索結果列表,客戶端收到后,顯示出來。

另外還有一種比較浪費流量一點,但是用戶體驗會更好:就是用戶一邊輸入,一邊發送關鍵詞到服務器來檢索,并顯示檢索結果, 隨著用戶輸入的內容的變化,檢索結果跟著變化。可以去看看 ReactiveCocoa 框架,上面有一些示例:

let searchStrings = textField.rac_textSignal .toSignalProducer .map { text in text as! String } .throttle0.5, onScheduler: QueueScheduler.mainQueueScheduler let searchResults = searchStrings .flatMap.Latest { query: String -> SignalProducer<NSData, NSURLResponse, NSError> in let URLRequest = self.searchRequestWithEscapedQueryquery return NSURLSession.sharedSession .rac_dataWithRequestURLRequest .retry2 .flatMapError { error in print"Network error occurred: error" return SignalProducer.empty } } .map { data, URLResponse -> String in let string = Stringdata: data, encoding: NSUTF8StringEncoding! return self.parseJSONResultsFromStringstring } .observeOnUIScheduler

发表评论

电子邮件地址不会被公开。 必填项已用*标注