[技術(shù)文檔][技術(shù)中心][iOS部][114啦]搜索引擎功能

需求說(shuō)明

1、原來(lái)默認(rèn)的搜索引擎為百度,現(xiàn)在添加切換搜索引擎的功能。
2、第一階段提供固定的8個(gè)搜索引擎提供切換。
3、切換后,當(dāng)搜索關(guān)鍵詞不是鏈接則使用(搜索引擎+關(guān)鍵詞)進(jìn)行搜索

相關(guān)代碼

SearchEngineTool是個(gè)單例,管理?yè)碛心男┮嬉约爱?dāng)前是哪個(gè)搜索引擎。
初始化搜索引擎

var allSearchEngines: [SearchEngineModel] {
        get {
            var engineArr: [SearchEngineModel]
            if let cacheEngine = self.cache?.object(forKey: "searchEngineCacheKey") as? [SearchEngineModel],cacheEngine.count <= defaultSearchEngines.count {
                engineArr = cacheEngine
            } else {
                var tempArr = [SearchEngineModel]()
                for engineDict in self.defaultSearchEngines {
                    let engine = SearchEngineModel(engineDict)
                    tempArr.append(engine)
                }
                engineArr = tempArr
                self.allSearchEngines = engineArr
            }
            return engineArr
        }
        set {
            self.cache?.setObject(newValue as NSCoding, forKey: "searchEngineCacheKey")
        }
    }

獲取當(dāng)前搜索引擎

var selectEngine: SearchEngineModel {
        get {
            return allSearchEngines.filter { (engine) -> Bool in
                return engine.isSelectEngine
            }.first ?? allSearchEngines.first!
        }
    }

切換搜索引擎的方法

func changeSelectEngine(_ index: Int) {
        selectEngine.isSelectEngine = false
        allSearchEngines[index].isSelectEngine = true
        self.cache?.setObject(allSearchEngines as NSCoding, forKey: "searchEngineCacheKey")
    }
  • 搜索時(shí)使用
var searchEngineURL: String {
        get {
            return searchEngineTool.selectEngine.engineUrl ?? "http://m.baidu.com/s?from=1006749l&word="
        }
    }
fileprivate func loadAndAddToHistoryWithURLString(_ URLString: String) {
        
        guard !isSearchUrlToChangeSearchKey(URLString) else { return }
        
        var text = self.searchEngineURL + URLString
        if let _ = MainViewFacade.sharedInstance.mainViewModel.verificationURL(URLString)
        {
            text = URLString
        }
        
        if UserDefaults.standard.bool(forKey: "isOpenSearch")
        {
            self.addKeyworkToSearchHistory(URLString)
        }
        
        if let request = MainViewFacade.sharedInstance.mainViewModel.verificationURL(text) {
            urlBarView?.clearText(UITapGestureRecognizer())
            urlBarView?.cancel()
//            MainViewFacade.sharedInstance.currentPageView().loadRequest(request)
            mainViewController()?.pageViewManager.newTabLoadRequest(request)
            if let absoluteString = request.url?.absoluteString {
                urlBarView?.addressTextString = absoluteString
            }
            cancelFocus()
        }
        
    }

URLString:將要打開(kāi)的鏈接或者關(guān)鍵詞
如果MainViewFacade.sharedInstance.mainViewModel.verificationURL(URLString)返回有值說(shuō)明URLString是正常url則直接打開(kāi)該url。
否則(self.searchEngineURL + URLString)添加搜索引擎前綴。

注:http://m.baidu.com/s?from=1006749l&word=中的 1006749l 是公司該APP的tn字段,能提供收入,不能隨便修改。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容