代码之家  ›  专栏  ›  技术社区  ›  Audrey Rozario

将变量值与swift 4.0中的数组值进行比较

  •  -2
  • Audrey Rozario  · 技术社区  · 7 年前

    Wherever the designation is there those are extra i.e the default value 我正在尝试让一个特定用户完成一定数量的帖子。下面是我的代码,我试图通过 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
                }
            }
    
    4 回复  |  直到 7 年前
        1
  •  1
  •   Ankit Jayaswal    7 年前

    虽然你得到了答案,但我发现有些矛盾,比如 通过迭代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
        }
    }
    
        2
  •  2
  •   Abdelahad Darwish    7 年前

    你需要过滤 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}
            }
    
    
    
    
        }
    
        3
  •  2
  •   nayem    7 年前

    这是以下问题的后续问题: this 我相信。如果你注意我的回答,你可以想出解决办法。但你似乎没有仔细地去理解答案。

    你只需要 filter 方法。

    在你的另一个问题中 I applied filter as:

    override func viewDidLoad() {
        super.viewDidLoad()
        // Here you apply your filter
        filteredArray = arrayOne.filter { $0.cellID == $0.cellID2 }
    }
    

    看看上面的片段,我说 滤波器 要仅查找符合条件的项目:

    { $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
        })
    }
    

    所以 滤波器 需要一个类型为的闭包 (ArrayElementType) -> Bool . 所以在闭包中,您得到数组元素,并且您必须通过返回 Bool 根据您的要求键入。

    在另一个问题中,您希望通过匹配 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) 方法。

        4
  •  0
  •   aBilal17 Deepak    7 年前

    更新您的此行

    if userID == overviewJobData.company_id{
    

    然后检查。

    let companyId = overviewJobData.company_id as? String
    if (userID == companyid){
    

    这是可行的。