我有一个类,我需要获得流派对象,放入数组,获得唯一值(因为我会有很多) 并使用该数组填充tableView的部分。
我有以下代码:
DROP FUNCTION if exists stack_test(integer[]);
CREATE OR REPLACE FUNCTION stack_test(integer[])
RETURNS text AS
$BODY$
declare
rec record;
sql text;
select_field_sum text;
core_crostab_1 text;
core_crostab_2 text;
ct_field_list text ;
begin
select_field_sum ='0.0';
core_crostab_1 ='';
core_crostab_2 ='';
ct_field_list ='';
FOR rec IN select unnest(( $1)) i order by 1
loop
ct_field_list = ct_field_list ||',wk' || (rec.i)::text || ' numeric' ;
select_field_sum = select_field_sum || '+coalesce(wk' || (rec.i)::text|| ',0)' ;
end loop;
core_crostab_1 = 'select advisor_id, week_number,sum(premium) premium from policies where week_number = any ( array['|| array_to_string($1, ',') ||'] ) and policies.current_status=''''T'''' or policies.current_status=''''I'''' group by advisor_id,week_number order by 1,2';
core_crostab_2 = 'select unnest((array['|| array_to_string($1, ',') ||'] )) order by 1';
sql = 'select *, ('||select_field_sum||') premiumsum from crosstab('''||core_crostab_1||''', '''||core_crostab_2||''') as ct(advisor_id integer '|| ct_field_list ||') ';
sql = 'select recruiters.full_name as requiter,advisors.advisor ,q1.* from ( '||sql||')q1 left join advisors on(q1.advisor_id= advisors.id ) left join recruiters on (advisors.recruiter_id = recruiters.id) order by 1,2';
return sql::text;
end;
$BODY$
LANGUAGE plpgsql volatile
COST 100;
unique返回唯一值(Action,Drama,Kids),但是当我尝试获取部分时:
class Movie {
var name: String!
var plot: String!
var imageUrl: String!
var genre: String!
init(name: String, plot: String, img: String, genre: String) {
self.name = name
self.plot = plot
self.imageUrl = img
self.genre = genre
}
}
}
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
var loadMovie = [Movie]()
let insertMovie = Movie(name: "Blow", plot: "Blow bla bla bla", img: "", genre: "Action")
let insertMovie2 = Movie(name: "BLade", plot: "Blade bla bla bla", img: "", genre: "Action")
let insertMovie3 = Movie(name: "Inside Out", plot: "Blow bla bla bla", img: "", genre: "Kids")
let insertMovie4 = Movie(name: "Titanic", plot: "Blow bla bla bla", img: "", genre: "Drama")
loadMovie.append(insertMovie)
loadMovie.append(insertMovie2)
loadMovie.append(insertMovie3)
loadMovie.append(insertMovie4)
let unique = NSSet(array: loadMovie.map { $0.genre })
它没有用。
我哪里错了?
答案 0 :(得分:1)
每次重新加载表视图时按类型过滤电影都非常昂贵。
这是一个解决方案,它使用一个标题(流派)名称数组和一个包含每个类型的[Movie]
数组的字典。
var unique = [String]()
var loadMovie = [String:[Movie]]()
添加插入影片的方法。逻辑是:
•如果类型存在,请将该类型的电影添加到字典中的[Movie]
数组中。
•如果类型不存在,请将类型添加到unique
数组,将电影添加到字典中。
func insertMovie(movie : Movie) {
let genre = movie.genre
if unique.contains(genre) {
loadMovie[genre]!.append(movie)
} else {
unique.append(genre)
loadMovie[genre] = [movie]
}
}
现在插入电影
let movie = Movie(name: "Blow", plot: "Blow bla bla bla", img: "", genre: "Action")
insertMovie(movie)
let movie2 = Movie(name: "BLade", plot: "Blade bla bla bla", img: "", genre: "Action")
insertMovie(movie2)
let movie3 = Movie(name: "Inside Out", plot: "Blow bla bla bla", img: "", genre: "Kids")
insertMovie(movie3)
let movie4 = Movie(name: "Titanic", plot: "Blow bla bla bla", img: "", genre: "Drama")
insertMovie(movie4)
相关的数据源和委托方法是
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return unique[section]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return unique.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let genre = unique[section]
return loadMovie[genre]!.count
}
在cellForRowAtIndexPath
中使用
...
let genre = unique[indexPath.section]
let movie = loadMovie[genre]![indexPath.row]
cell.textLabel!.text = movie.name
...
另一种选择是数组数组
答案 1 :(得分:0)
Swift 4的更新
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return unique[section]
}
func numberOfSections(in tableView: UITableView) -> Int {
return unique.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let genre = unique[section]
return loadMovie[genre]!.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "basicCell", for: indexPath)
let genre = unique[indexPath.section]
let movie = loadMovie[genre]![indexPath.row]
cell.textLabel!.text = movie.name
return cell
}