我正在努力获得一位特定用户完成的帖子数量。我在下面的代码中尝试将UserDefaults
中的值与cellForAtIndexPath
匹配,它会从数据库中提供所有值:
import UIKit
struct OverViewJob: Decodable {
let id: String
let c_id: String
let desig: String
let exp_from: String
let location: String
let edu_qual: String
}
class OverviewViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
var jobOverViewArray = [OverViewJob]()
@IBOutlet weak var jobTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
getJobOverviewData()
//MARK:: getting values by userdefaults
let companyDefaultValue = UserDefaults.standard
if let userID = companyDefaultValue.string(forKey: "user_type_id"){
print("User type ID=\(userID)")
}
}
func getJobOverviewData()
{
let jobUrl = URL(string: "http://172.16.1.22/Get-Job-API/get-jobs/")
URLSession.shared.dataTask(with: jobUrl!) { (data, response, error) in
do
{
if error == nil
{
self.jobOverViewArray = try JSONDecoder().decode([OverViewJob].self, from: data!)
for mainJobArr in self.jobOverViewArray
{
DispatchQueue.main.async {
self.jobTableView.reloadData()
}
}
let companyDefaultValue = UserDefaults.standard
if let userID = companyDefaultValue.string(forKey: "user_type_id"){
print("Company ID or user type ID=\(userID)")
self.jobFilterOverviewArray = self.jobOverViewArray.filter {$0.company_id == userID}
print("Filter job =\(self.jobFilterOverviewArray)")
print("Main Array=\(self.jobOverViewArray)")
}
print("Job Data****\(self.jobOverViewArray)")
}
}
catch
{
// print("my data=\(self.mainCellData)")
print("Error in get JSON Data\(error)")
}
}.resume()
}ray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
if jobTableView.isHidden == false{
let cell = Bundle.main.loadNibNamed("VendorJobPostTableViewCell", owner: self, options: nil)?.first as! VendorJobPostTableViewCell
let companyDefaultValue = UserDefaults.standard
let userID = companyDefaultValue.string(forKey: "user_type_id")
let overviewJobData = jobOverViewArray[indexPath.row]
if userID == overviewJobData.company_id{
print("cell userID fetch=\(String(describing: userID))")
print("cell companyID fetch=\(overviewJobData.company_id)")
cell.LabelOne.text = overviewJobData.desig
cell.lblTwo.text = overviewJobData.exp_from
cell.lblThree.text = overviewJobData.location
cell.lblFour.text = overviewJobData.edu_qual
}
return cell
}
}
答案 0 :(得分:2)
我认为这是this的后续问题。如果你在那里注意我的答案,你可以拿出解决方案。但似乎你没有仔细尝试理解答案。
您只需要filter
方法。
在您的其他问题I applied filter as:
中override func viewDidLoad() {
super.viewDidLoad()
// Here you apply your filter
filteredArray = arrayOne.filter { $0.cellID == $0.cellID2 }
}
请看上面的代码段,我告诉filter
只找到符合条件的项目:
{ $0.cellID == $0.cellID2 }
你可能会对 $0
感到困惑。这是一个速记。如果你想知道幕后的情况,那就让我们来看看:
override func viewDidLoad() {
super.viewDidLoad()
// Here you apply your filter
filteredArray = arrayOne.filter({ (elementOfArray) -> Bool in
return elementOfArray.cellID == elementOfArray.cellID2
})
}
因此filter
期望关闭类型(ArrayElementType) -> Bool
。因此,在闭包内部,您将获得数组元素,并且必须根据您的要求返回Bool
类型来满足返回类型。
在您的其他问题中,您希望通过匹配struct
的两个属性进行比较。但是在这里,你想要与普通String
匹配。所以它应该与我已经回答的非常不同。您只需使用您拥有的普通struct
替换String
的其中一个属性,并使用您想要匹配的实际属性。
类似的东西:
override func viewDidLoad() {
super.viewDidLoad()
// Here you apply your filter
filteredArray = arrayOne.filter { $0.cellID == "string from your user defaults key" }
}
编辑:
override func viewDidLoad() {
super.viewDidLoad()
//MARK:: getting values by userdefaults
let companyDefaultValue = UserDefaults.standard
if let userID = companyDefaultValue.string(forKey: "user_type_id"){
print("User type ID=\(userID)")
jobFilterOverviewArray = jobOverViewArray.filter{ $0.company_id == userID }
}
}
不要忘记使用
jobFilterOverviewArray
作为您的数据源。就像func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
方法一样。
答案 1 :(得分:2)
您需要在加载表格之前过滤jobOverViewArray
您需要在此处查看哪些过滤条件,检查jobOverViewArray
具有的内容并使用在显示前过滤数据所需的任何过滤条件
override func viewDidLoad() {
super.viewDidLoad()
//MARK:: getting values by userdefaults
let companyDefaultValue = UserDefaults.standard
if let userID = companyDefaultValue.string(forKey: "user_type_id"){
print("User type ID=\(userID)")
// **$0.id** filter with id check what you want and write it
jobOverViewArray = jobOverViewArray.filter {$0.id == userID}
}
}
答案 2 :(得分:1)
虽然你得到了答案,但我发现了一些不一致的地方,例如通过迭代jobOverViewArray.count重新加载表,再次检查cellForRowAtIndexPath中的count_id 。您可以按如下方式更新代码:
注意:我想您只需要显示其c_id == user_type_id
struct OverViewJob: Decodable {
let id: String
let c_id: String
let desig: String
let exp_from: String
let location: String
let edu_qual: String
}
class OverviewViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var jobOverViewArray = [OverViewJob]()
var jobFilterOverviewArray = [OverViewJob]()
@IBOutlet weak var jobTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
getJobOverviewData()
}
func getJobOverviewData() {
let jobUrl = URL(string: "http://172.16.1.22/Book-My-BIM-API/Get-Job-API/get-jobs/")
URLSession.shared.dataTask(with: jobUrl!) { (data, response, error) in
do {
if error == nil {
self.jobOverViewArray = try JSONDecoder().decode([OverViewJob].self, from: data!)
let companyDefaultValue = UserDefaults.standard
if let userID = companyDefaultValue.string(forKey: "user_type_id") {
print("Company ID or user type ID = \(userID)")
self.jobFilterOverviewArray = self.jobOverViewArray.filter{ $0.c_id == userID }
}
// Reload table view
DispatchQueue.main.async {
self.jobTableView.reloadData()
}
}
} catch {
print("Error in get JSON Data\(error)")
}
}.resume()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return jobFilterOverviewArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("VendorJobPostTableViewCell", owner: self, options: nil)?.first as! VendorJobPostTableViewCell
let overviewJobData = jobFilterOverviewArray[indexPath.row]
cell.LabelOne.text = overviewJobData.desig
cell.lblTwo.text = overviewJobData.exp_from
cell.lblThree.text = overviewJobData.location
cell.lblFour.text = overviewJobData.edu_qual
return cell
}
}
答案 3 :(得分:0)
更新此行
if userID == overviewJobData.company_id{
使用以下内容然后检查。
let companyId = overviewJobData.company_id as? String
if (userID == companyid){
这样可行。