上一篇已經完成Tag分類
部分
只剩下模糊搜尋
以及tableView顯示
這篇就來把剩下的完成
這裡標題使用NSPredicate
因為OC
好像可以使用NSPredicate
達成目標Swift
好像不行
可能要使用filter
filter
可以用特定自去搜尋你所傳的文字
比如 我今天要洗澡打球睡覺
contains
睡覺
的話
就可以找到本文內有睡覺
let ary = ["我要吃飯","打球","我今天要洗澡打球睡覺","睡覺"]
let resultAry = ary.filter {
(str) -> Bool in return
str.contains("睡覺")
}
print(resultAry)
打印出來可以找到所有有睡覺
的文字字串
並且儲存在陣列裡面
["我今天要洗澡打球睡覺", "睡覺"]
這樣可以找字串
就方便多了
可以把我們上一篇的Tag
拿來找Tag
地下的文字都拿來找過一遍
找到的就存在陣列
並且顯示在tableView
let strokeStr = [strokeStr]
for i in objectArray.indices {
for j in objectArray[i].sectionObjects.indices {
// 搜尋所有Tag底下的文字
let resultAry = strokeStr.filter {
(str) -> Bool in return
str.contains(objectArray[i].sectionObjects[j])
}
// 如果有找到符合的話執行
if resultAry.count > 0 {
if (filterArr[objectArray[i].sectionName] != nil) {
var arr = filterArr[objectArray[i].sectionName]
// 去除重複行程
for k in arr!.indices {
if arr![k] == objectArray[i].sectionObjects[j] {
return
}
}
// 新增行程
arr?.append(objectArray[i].sectionObjects[j])
filterArr.updateValue(arr!, forKey: objectArray[i].sectionName)
}else{
// 創立Tag Key 並且 新增行程
let arr = [objectArray[i].sectionObjects[j]]
filterArr.updateValue(arr, forKey: objectArray[i].sectionName)
}
}
}
}
完成以後就可以幫忙分類
單純分類而已
Demo
接下來處理已完成項目
使用上次的Alert
事件
當按下確認以後
將array
的行程remove
並且updateValue
然後reload TableView
// 建立[確認]按鈕
let okAction = UIAlertAction(
title: "確認",
style: .default,
handler: {
(action: UIAlertAction!) -> Void in
var arr = self.filterArr[self.tableArr[indexPath.section].sectionName]
arr?.remove(at: indexPath.row)
self.filterArr.updateValue(arr!, forKey: self.tableArr[indexPath.section].sectionName)
self.tableArrInit()
})
alertController.addAction(okAction)
Demo
全部就設置完畢了
來Demo
全部流程
新增什麼文字
會分類
到哪個Tag
以前沒有的Tag
可以直接
輸入新增
一樣會幫忙新增
使用以下文字
個人有個小癖好 主要是因為本人有隨手記錄文字的習慣 但很多詞會重複、想要這個程式 擁有分類功能的並且可以自動分類我寫的詞屬於哪一個檔案 譬如我輸入「寫功課 洗衣服 看影片」按下更新之後就能將寫功課-歸類為課業 洗衣服歸類為待做事項、看影片歸類為娛樂. 假如我輸入「洗衣服 寫功課 看影片 寫功課」按下更新後自動屏蔽重複的字眼、只保留一次即可、詞語詞以空格為界 假如打錯字則將辨識不了的詞語顯示出來手動辨識
會自動
去我的Tag做分類
這邊輸入重複的行程
以及沒重複的看結果
點選TableView
跳出Alert
確認後刪除該Cell
以上大概是這次練習
寫成很急促雖然UI很醜
但是功能大部分自己都還算滿意