前言
其實(shí)這個(gè)庫(kù)早年就已經(jīng)創(chuàng)建并完成了第一版,支持 全拼+首字母+中英文+多音字 搜索,功能還算強(qiáng)大。后面也一直沒再關(guān)注。這次借著修復(fù) BUG 的功夫更新了一版,并發(fā)布了一個(gè) swift 版本,也算還了一筆技術(shù)債。
項(xiàng)目地址:點(diǎn)我
功能介紹
這個(gè)庫(kù)目前由 ObjectiveC 版和 Swift 版。都支持 全拼+首字母+中英文+多音字 搜索。
具體效果如何,請(qǐng)看下圖:
Search.gif
原理介紹
- 加載拼音資源文件,初始化配置
- 以匹配關(guān)鍵字 keyword 為例,優(yōu)先精準(zhǔn)匹配
- 精準(zhǔn)匹配沒搜索到,那么考慮將搜索文本轉(zhuǎn)成拼音首字母,將 keyword 去搜索這個(gè)拼音首字母的字符串是否有匹配到
- 如果拼音首字母沒匹配到,那么考慮全拼是否能匹配
實(shí)現(xiàn)原理說穿了還是比較簡(jiǎn)單的,主要是將各個(gè)文字的拼音的排列組合列出來,再去一一匹配。
使用
OC版
NSArray *ranges;
BOOL match = [self.textLabel.text canMatchWithKeyword:searchText allRanges:&ranges];
if (match) {
...
}
swift版
var ranges: [Range<String.Index>] = []
text.canMatch(with: searchText, all: &ranges)
if ranges.count > 0 {
...
}
如何集成
對(duì)于ObjectiveC項(xiàng)目,通過pod組件庫(kù)的方式引入。執(zhí)行:
pod 'IASearchKit', '~> 1.2.0'
對(duì)于Swift項(xiàng)目,通過pod組件庫(kù)方式引入。執(zhí)行:
pod 'KeySearch', '~> 0.1.5'
源碼地址:點(diǎn)我跳轉(zhuǎn)