000*_*010 5 arrays struct uitableview ios swift
想知道是否有人可以帮助我在 Swift 中使用谓词进行过滤。
我有一个有点凌乱的数据源,用于填充 UITableView。数据源是一个结构数组。结构体定义如下:
struct Exercises {
let category: String
let name : String
let x_seed: [Double]
let y_seed: [Double]
let hasMult: Bool
}
Run Code Online (Sandbox Code Playgroud)
现在在我的 tableview 控制器中,我持有一个包含表的所有数据的结构数组。
class MainTableViewController: UITableViewController, UISearchResultsUpdating {
var exercises = [Exercises]()
var filtered_exercises = [Exercises]()
var resultSearchController = UISearchController()
override func viewDidLoad() {
super.viewDidLoad()
// MARK: - Table view data source
self.exercises = [
Exercises(category:"Sports", name:"Bowling", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Water Polo", x_seed:[125,155,185], y_seed:[10.00, 12.40,14.80], hasMult:false),
Exercises(category:"Sports", name:"Handball", x_seed:[125,155,185], y_seed:[12.00, 14.87, 17.77], hasMult:false),
Exercises(category:"Sports", name:"Dancing", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:true),
Exercises(category:"Sports", name:"Frisbee", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Volleyball", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Archery", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:false),
Exercises(category:"Sports", name:"Golf", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:true)]
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据“名称”字段过滤练习数组,并填充一个新的数据源filtered_exercises 以填充表视图。我不确定在这种情况下如何使用谓词。
// Search functionality
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filtered_exercises.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
// ??????????????
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以读取字符串数组中的所有名称并轻松地在 tableview 中显示它。问题是我需要保留结构,因为其中包含的数据被传递到其他视图控制器。
那么,如何过滤结构数组?
谢谢!
如果您不坚持NSPredicate(因为您没有使用,所以看不出您应该坚持的理由NSFetchRequest,...),这是代码:
struct Exercises {
let category: String
let name : String
let x_seed: [Double]
let y_seed: [Double]
let hasMult: Bool
}
let exercises = [
Exercises(category:"Sports", name:"Bowling", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Water Polo", x_seed:[125,155,185], y_seed:[10.00, 12.40,14.80], hasMult:false),
Exercises(category:"Sports", name:"Handball", x_seed:[125,155,185], y_seed:[12.00, 14.87, 17.77], hasMult:false),
Exercises(category:"Sports", name:"Dancing", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:true),
Exercises(category:"Sports", name:"Frisbee", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Volleyball", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
Exercises(category:"Sports", name:"Archery", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:false),
Exercises(category:"Sports", name:"Golf", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:true)
]
let options = NSStringCompareOptions.CaseInsensitiveSearch | NSStringCompareOptions.DiacriticInsensitiveSearch
// Filter exercises by name (case and diacritic insensitive)
let filteredExercises = exercises.filter {
$0.name.rangeOfString("Ol", options: options) != nil
}
let filteredExerciseNames = ", ".join(filteredExercises.map({ $0.name }))
println(filteredExerciseNames)
Run Code Online (Sandbox Code Playgroud)
它打印水球、排球、高尔夫球。
| 归档时间: |
|
| 查看次数: |
1941 次 |
| 最近记录: |