需求說(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字段,能提供收入,不能隨便修改。