【发布时间】:2019-06-11 12:30:03
【问题描述】:
目前我有以下代码:
import UIKit
struct ToBeSearched {
var value1 = "1"
var value2 = "3"
var value3 = "3"
var boolean = true
}
var data = [ToBeSearched]()
var completeData = [ToBeSearched]()
public func updateSearchResults(for searchController: UISearchController) {
if let text = searchController.searchBar.text,
!text.isEmpty {
data = completeData.filter{
// How to encapsulate this behavior, i.e. to extend it to use new values (value2, value2...)
$0.value1.lowercased().contains(text.lowercased())
}
} else {
data = completeData
}
reloadResults()
}
这是一个简单的搜索代码,用于查找 value1 包含搜索文本的所有值。
如果我还想匹配 value2 和 value3 怎么办?我怎样才能提取搜索逻辑,以便在不触及主代码的情况下单独更改它。
目前,我必须使用binary OR 运算符来处理所有案例:
let searchText = text.lowercased()
$0.value1.lowercased().contains(searchText) ||
$0.value2.lowercased().contains(searchText) ||
$0.value3.lowercased().contains(searchText)
...
有没有更优雅的方法来达到同样的效果?
【问题讨论】:
标签: swift oop search encapsulation object-oriented-analysis