Open1

Combineでインクリメンタルサーチ

ほすほす

Combineフレームワークを利用して、インクリメンタルサーチを行う場合の例

@Published var searchText: String = ""
private var searchCancellable: AnyCancellable?

// `searchText`に変化があるたびに処理を実行する.
searchCancellable = $searchText
    .removeDuplicates() // 同じイベントなら無視する.
    .debounce(for: 0.5, scheduler: RunLoop.main) // 0.5秒以内はイベントが発行されない.
    .sink(receiveValue: { str in
        if str.isEmpty {
            // 検索結果をクリア.
            self.searchedProducts = nil
        }
        else {
            // 実際の検索処理.
            self.filteredProductBySearch()
        }
    })