키워드로 배열의 요소 검색 [swift]

5417 단어 Swift2.0Swift

개시하다


배열에 텍스트 등을 미리 넣을 수 있을 때 키워드로 검색을 해서 그 키워드를 포함하는 요소를 찾아내는 것이 편리하다고 생각합니다.완성형은 ↓ 키워드를 빈칸으로 구분하여 여러 키워드로 검색할 수 있습니다.


Interface Builder


textField를 배치하고 3가지 bodan(add, search,clear)을 준비했습니다.아래에 테이블뷰를 놓고 그룹의 요소와 검색 결과를 표시합니다.이런 느낌

이루어지다


공백으로 구분된 문자열.Extension을 머리에 덧붙이다.
ViewController

import UIKit

// keyword分解用のextension
extension String {
    var words: [String] {
        return componentsSeparatedByCharactersInSet(.punctuationCharacterSet()).joinWithSeparator("").componentsSeparatedByString(" ").filter{!$0.isEmpty}
    }
}

stringAray에 텍스트를 미리 넣습니다.
ViewController
 //すべてのテキストを入れる配列
    var stringArray = ["this is a testString, please add your sentence.","I like apples", "Do you like apples?","今日はいい天気ですね", "はい、いい天気です","私はappleが好きです"]
    //検索結果を入れる配列
    var searchArray = [String]()
    @IBOutlet var table: UITableView!
    @IBOutlet var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        table.delegate = self
        table.dataSource = self
        table.reloadData()
    }


누름단추


dd, 검색,clear 단추를 실행합니다.dd는 텍스트를 추가하는 단추이고,search는 검색하는 단추이며,clear는 리셋 단추입니다.
ViewController
    //addボタン
    @IBAction func add(sender: UIButton) {
        if textField?.text == "" {
            textAlert()
        } else {
            let newText = textField.text
            stringArray.append(newText!)
            print("全テキスト->",stringArray)
            table.reloadData()
        }
    }

    //searchボタン
    @IBAction func search(sender: UIButton) {
        if textField?.text == "" {
            textAlert()
        } else {
            let keyWords = textField.text?.words
            var preSearchArray = [String]()
            print(keyWords)

            for keyWord in keyWords! {
                // keyWordを含むテキストをresultsに加える
                let results = stringArray.filter{$0.containsString(keyWord)}
                for result in results {
                preSearchArray.append(result)

                //重複する配列は除く
                let removeOverlapResultArray = NSOrderedSet(array: preSearchArray)
                searchArray = removeOverlapResultArray.array as! [String]
                }
                print("検索結果を入れる配列 ->",searchArray)

                //もしキーワードに引っかかる検索が見つからなかった場合アラートを出す
                if searchArray == [] {
                    let alert = UIAlertView()
                    alert.title = "アラート"
                    alert.message = "検索されたキーワードを含むテキストは存在しません"
                    alert.addButtonWithTitle("OK")
                    alert.show()
                }
                table.reloadData()
            }
        }
    }

    //clearボタン
    @IBAction func clear (sender: UIButton) {
        searchArray = []
        textField.text?.removeAll()
        table.reloadData()
    }

    func textAlert() {
        let alert = UIAlertView()
        alert.title = "アラート"
        alert.message = "文字が入力されていません"
        alert.addButtonWithTitle("OK")
        alert.show()
    }

이런 느낌.filter가 아주 편리하네요. 중복 배열을 배제하지 않으면 여러 검색 키워드의 텍스트가 중복 표시됩니다.

tableview


그리고 테이블 뷰의 설치 부분입니다.일반 텍스트 표시 및 검색 결과 표시
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if searchArray == [] {
            return stringArray.count
        } else {
            return searchArray.count
        }
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell: UITableViewCell =  UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
        if searchArray == [] {
            cell.textLabel?.text = stringArray[indexPath.row]
        } else {
            cell.textLabel?.text = searchArray[indexPath.row]
        }
        return cell
    }

끝맺다


여러 키워드(예를 들어 apple, 날씨)를 사용하여 검색할 때 apple이나 날씨를 포함하는 검색 결과를 표시합니다.앱과 날씨, 쌍방의 검색을 포함하려면 어떻게 해야 좋을까요?
나는 코드에 좋지 않은 점이 매우 많다고 생각한다.당신의 건의를 받을 수 있다면 다행입니다.

참고 자료


공백으로 구분된 문자열 가져오기
filter 사용법
배열에서 중복된 요소 제거

좋은 웹페이지 즐겨찾기